[英]Angular factory, object scope confusion
我正在嘗試修改函數中的變量,但是代碼中一定存在我不了解的范圍:
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的值? 在將它分配給self之后,我嘗試過執行this.foo,self.foo等很多事情,我相信我錯過的東西太明顯了,在有人為它清理之后我會覺得自己是個白痴。我。
謝謝。
通過查看您的代碼,您需要首先將$.post
更改$.post
$http.post
,以便在執行之后執行$ digest循環,從而獲得對綁定更好的控制器,在angular中使用jQuery會導致范圍digest
循環產生更多問題。
您的代碼將無法工作,因為您是從代碼中創建了一個Ajax並從done之外返回了變量,應該使用done
或success方法從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
}
});
}
};
});
希望這可以對您有所幫助,謝謝。
試試看:
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。
干杯,
瓦倫丁
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.