我的工厂内部有多个功能,我无法通过单击按钮来调用我的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 = [
];
})();
我在编写第一个Angular应用程序时遇到的其他问题,代码的重点是什么:
$scope.FighterController = charactersList;
是否允许我在视图端访问返回的数据?我是否必须重置saveFighter功能中的范围才能使我的按钮工作?
我是否正确为app.controller设置依赖项,是依赖注入吗?
谢谢大家,非常感谢您对我的代码设置的任何评论!
答案 0 :(得分:3)
你还没有解释你为解决这个问题所采取的措施,所以我会解释一下。
在这里,您正试图致电xmlService.saveCharacter.success()
:
xmlService.saveCharacter.success(function(data){
console.log(data);
});
但是xmlService.saveCharacter
是一个功能。它没有success
属性; success
未定义。所以这给出了你看到的错误。
您需要致电 xmlService.saveCharacter()
:
xmlService.saveCharacter().success(function(data){
console.log(data);
});
但这仍然是个问题,因为saveCharacter()
函数返回字符串"hello"
。此字符串没有success
属性。 success
再次undefined
,现在导致同样的错误。
要解决该错误,您只需删除return "hello";
并取消注释已注释掉的代码:
factory.saveCharacter = function saveCharacter(){
return $http.post('php/crud.php');
};
解决这两个问题应该可以解决您的问题。
答案 1 :(得分:0)
您缺少调用()
更改代码的函数:
$scope.saveFighter = function saveFighter(){
console.log(xmlService);
xmlService.saveCharacter().success(function(data){
// ----------------------^
console.log(data);
});
}
$scope.FighterController = charactersList;
将characterList的数据分配给范围变量,范围变量可在html范围内访问,就像控制器和视图之间的桥梁一样。
答案 2 :(得分:0)
我将工厂调整到这个结构,现在我可以调用我的功能了。
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();