Javascript AngularJS:undefined不是工厂提供的函数

Javascript AngularJS:undefined不是工厂提供的函数,javascript,angularjs,angularjs-factory,Javascript,Angularjs,Angularjs Factory,我的工厂中有多个函数,我无法使用ng click从按钮单击调用saveCharacter函数。getCharacters函数工作正常。很抱歉提前转贴,我已经看过很多不同的例子,无法解决我的具体问题与这些。当我记录xmlService时,我可以看到我的函数,但我不确定它为什么不会调用它。我试图用saveCharacter返回一个PHP文件的帖子,但改为字符串返回,以测试我的问题是什么 再次感谢您的帮助 (function(){ var app = angular.module('arena',

我的工厂中有多个函数,我无法使用ng click从按钮单击调用saveCharacter函数。getCharacters函数工作正常。很抱歉提前转贴,我已经看过很多不同的例子,无法解决我的具体问题与这些。当我记录xmlService时,我可以看到我的函数,但我不确定它为什么不会调用它。我试图用saveCharacter返回一个PHP文件的帖子,但改为字符串返回,以测试我的问题是什么

再次感谢您的帮助

(function(){

var app = angular.module('arena', []);

app.factory('xmlService', function($http){

    var factory = {};

    factory.getCharacter = function getCharacter(){         
        return $http.get('xml/characterTemplate.xml');
    };
    factory.saveCharacter = function saveCharacter(){
        return "hello";
        //return $http.post('php/crud.php');
    };

    return factory;

});

app.controller('FighterController', ['$scope','xmlService', function($scope, xmlService){
    this.fighterList = fighterList;


    $scope.saveFighter = function saveFighter(){
        console.log(xmlService);
        xmlService.saveCharacter.success(function(data){
            console.log(data);
        });
    }

    function loadFighters(){


        xmlService.getCharacter().success(function(data){
            var x2js = new X2JS(); 
            var charactersList  = x2js.xml_str2json(data);

            for(var i = 0; i < charactersList.characters.character.length; i++)
            {
                var currentFighter = charactersList.characters.character[i];
                fighterList.push(currentFighter);

            }                
            $scope.FighterController = charactersList;
        });
    }
    loadFighters();
}]);



var fighterList = [
];

})();
这是否允许我访问视图端返回的数据?我是否必须重置saveFighter功能中的作用域才能使按钮工作

我是否正确设置了app.controller的依赖项,以及依赖项注入是否正确


谢谢大家,任何关于我的代码是如何设置的评论都将不胜感激

您缺少使用
()
将代码更改为:

$scope.saveFighter = function saveFighter(){
    console.log(xmlService);

    xmlService.saveCharacter().success(function(data){
    // ----------------------^
        console.log(data);
    });
 }
$scope.FighterController=字符列表
将characterList的数据分配给作用域变量,并且作用域变量可以在html中访问。作用域就像控制器和视图之间的桥梁


我建议您

使用
()
将代码更改为:

$scope.saveFighter = function saveFighter(){
    console.log(xmlService);

    xmlService.saveCharacter().success(function(data){
    // ----------------------^
        console.log(data);
    });
 }
$scope.FighterController=字符列表
将characterList的数据分配给作用域变量,并且作用域变量可以在html中访问。作用域就像控制器和视图之间的桥梁


我建议您

使用
()
将代码更改为:

$scope.saveFighter = function saveFighter(){
    console.log(xmlService);

    xmlService.saveCharacter().success(function(data){
    // ----------------------^
        console.log(data);
    });
 }
$scope.FighterController=字符列表
将characterList的数据分配给作用域变量,并且作用域变量可以在html中访问。作用域就像控制器和视图之间的桥梁


我建议您

使用
()
将代码更改为:

$scope.saveFighter = function saveFighter(){
    console.log(xmlService);

    xmlService.saveCharacter().success(function(data){
    // ----------------------^
        console.log(data);
    });
 }
$scope.FighterController=字符列表
将characterList的数据分配给作用域变量,并且作用域变量可以在html中访问。作用域就像控制器和视图之间的桥梁


我建议您

我将我的工厂调整为这种结构,现在我可以调用我的函数了

app.factory('xmlService', function($http){

    var factory = {
        getCharacter: function(){
            return $http.get('xml/characterTemplate.xml');
        },
        saveCharacter:function(){
            console.log('hello?');
            return $http.post('php/crud.php');
        }
    };
    return factory;

}); 
在我的控制器中

$scope.saveFighter = function(){
        console.log(xmlService);
        xmlService.saveCharacter().success(function(data){
            console.log(data);
        });

    }

    function loadFighters(){
        xmlService.getCharacter().success(function(data){
            var x2js = new X2JS(); 
            var charactersList  = x2js.xml_str2json(data);

            for(var i = 0; i < charactersList.characters.character.length; i++)
            {
                var currentFighter = charactersList.characters.character[i];
                fighterList.push(currentFighter);

            }                
            $scope.FighterController = charactersList;
        });
    }
    loadFighters();
$scope.saveFighter=function(){
console.log(xmlService);
xmlService.saveCharacter().success(函数(数据){
控制台日志(数据);
});
}
函数loadFighters(){
xmlService.getCharacter().success(函数(数据){
var x2js=新的x2js();
var charactersList=x2js.xml\u str2json(数据);
for(变量i=0;i
我将工厂调整为这种结构,现在我可以调用我的函数了

app.factory('xmlService', function($http){

    var factory = {
        getCharacter: function(){
            return $http.get('xml/characterTemplate.xml');
        },
        saveCharacter:function(){
            console.log('hello?');
            return $http.post('php/crud.php');
        }
    };
    return factory;

}); 
在我的控制器中

$scope.saveFighter = function(){
        console.log(xmlService);
        xmlService.saveCharacter().success(function(data){
            console.log(data);
        });

    }

    function loadFighters(){
        xmlService.getCharacter().success(function(data){
            var x2js = new X2JS(); 
            var charactersList  = x2js.xml_str2json(data);

            for(var i = 0; i < charactersList.characters.character.length; i++)
            {
                var currentFighter = charactersList.characters.character[i];
                fighterList.push(currentFighter);

            }                
            $scope.FighterController = charactersList;
        });
    }
    loadFighters();
$scope.saveFighter=function(){
console.log(xmlService);
xmlService.saveCharacter().success(函数(数据){
控制台日志(数据);
});
}
函数loadFighters(){
xmlService.getCharacter().success(函数(数据){
var x2js=新的x2js();
var charactersList=x2js.xml\u str2json(数据);
for(变量i=0;i
我将工厂调整为这种结构,现在我可以调用我的函数了

app.factory('xmlService', function($http){

    var factory = {
        getCharacter: function(){
            return $http.get('xml/characterTemplate.xml');
        },
        saveCharacter:function(){
            console.log('hello?');
            return $http.post('php/crud.php');
        }
    };
    return factory;

}); 
在我的控制器中

$scope.saveFighter = function(){
        console.log(xmlService);
        xmlService.saveCharacter().success(function(data){
            console.log(data);
        });

    }

    function loadFighters(){
        xmlService.getCharacter().success(function(data){
            var x2js = new X2JS(); 
            var charactersList  = x2js.xml_str2json(data);

            for(var i = 0; i < charactersList.characters.character.length; i++)
            {
                var currentFighter = charactersList.characters.character[i];
                fighterList.push(currentFighter);

            }                
            $scope.FighterController = charactersList;
        });
    }
    loadFighters();
$scope.saveFighter=function(){
console.log(xmlService);
xmlService.saveCharacter().success(函数(数据){
控制台日志(数据);
});
}
函数loadFighters(){
xmlService.getCharacter().success(函数(数据){
var x2js=新的x2js();
var charactersList=x2js.xml\u str2json(数据);
for(变量i=0;i
我将工厂调整为这种结构,现在我可以调用我的函数了

app.factory('xmlService', function($http){

    var factory = {
        getCharacter: function(){
            return $http.get('xml/characterTemplate.xml');
        },
        saveCharacter:function(){
            console.log('hello?');
            return $http.post('php/crud.php');
        }
    };
    return factory;

}); 
在我的控制器中

$scope.saveFighter = function(){
        console.log(xmlService);
        xmlService.saveCharacter().success(function(data){
            console.log(data);
        });

    }

    function loadFighters(){
        xmlService.getCharacter().success(function(data){
            var x2js = new X2JS(); 
            var charactersList  = x2js.xml_str2json(data);

            for(var i = 0; i < charactersList.characters.character.length; i++)
            {
                var currentFighter = charactersList.characters.character[i];
                fighterList.push(currentFighter);

            }                
            $scope.FighterController = charactersList;
        });
    }
    loadFighters();
$scope.saveFighter=function(){
console.log(xmlService);
xmlService.saveCharacter().success(函数(数据){
控制台日志(数据);
});
}
函数loadFighters(){
xmlService.getCharacter().success(函数(数据){
var x2js=新的x2js();
var charactersList=x2js.xml\u str2json(数据);
for(变量i=0;i
您还没有真正解释如何解决此问题,因此我将对此进行解释

在这里,您试图调用
xmlService.saveCharacter.success()

但是
xmlService.saveCharacter
是一个函数。它没有
success
属性<代码>成功
未定义。这就是你看到的错误

您需要调用
xmlService.saveCharacter()

但这仍然是一个问题,因为
saveCharacter()