我试图修改一个函数内的变量,但必须有一些我不理解的范围,代码:
app.factory("UserService", function(){
var foo = 'bar';
return {
init: function(){
var self = this;
self.create();
},
create: function(){
$.post(server+"api/users", {
uuid: self.uuid
})
.done(function(data) {
if(data.reply !== 0){
foo = true;
} else {
foo = false;
}
});
return foo;
}
};
});
为什么我不能在函数中更改foo的值?我已经尝试过这样做了.foo,self.foo,在把它分配给自己之后,在很多其他事情中,我相信我错过了一些太明显的东西,我觉得自己像个白痴在有人为我清理之后。
感谢。
答案 0 :(得分:1)
通过查看代码,您需要先将$.post
更改为$http.post
,以便在执行后通过执行$ digest循环来获得更好的控制器结束,
在角度内使用jQuery会在范围digest
周期中产生更多问题。
您的代码将无效,因为您从代码中创建了Ajax并从完成之外返回变量,应该使用done
或成功方法从promise的完成返回。
<强>服务强>
app.factory("UserService", function($http) {
var foo = 'bar';
return {
init: function() {
var self = this;
self.create();
},
create: function() {
return $http.post(server + "api/users", {
uuid: self.uuid
})
.then(function(res) {
if (res.data.reply !== 0) {
return foo = true; //returning data when promise is resolved
} else {
return foo = false; //returning data when promise is resolved
}
});
}
};
});
希望这可以帮助你,谢谢。
答案 1 :(得分:0)
试试:
app.factory("UserService", function(){
var foo = 'bar';
return {
init: function(){
var self = this;
self.create();
},
create: function(){
$.post(server+"api/users", {
uuid: self.uuid
})
.done(function(data) {
if(data.reply !== 0){
return true;
} else {
return false;
}
});
}
};
});
异步函数完成后,它应该返回true或false。
干杯,
的Valentin