[英]variable scope in an angular factory
我正在嘗試更改我的角度工廠的return語句內的folders變量(數組),但它似乎僅對我編寫的create動作有效。 我認為我不了解變量作用域在工廠中的工作方式。
這有效:
folders.push(response.folder)
但是...當我使用underscore.js函數_without(返回數組)時,它不會更改文件夾變量。
folders = _.without(folders, _.findWhere(folders, {id: folder.id }))
這是我的工廠代碼:
angular.module('cmsApp')
.factory('Folders', function(Restangular){
var folders = Restangular.all('folders').getList().$object;
return {
get: function(){
return folders;
},
create: function(folderName) {
folder = { label: folderName };
folders.post(folder).then(function(response) {
folders.push(response.folder);
})
return folders;
},
destroy: function(folder) {
folders.remove(folder).then(function(){
folders = _.without(folders, _.findWhere(folders, {id: folder.id }))
})
return folders;
}
}
});
create函數返回更新的文件夾var,但是destroy函數返回未更改的文件夾var。
_.without
返回一個新數組,請參閱docs ,因此您可以有效地更改folders
指向的位置。 然而,由於您呼叫_.without
只有一次承諾解決,即內部then
只會您已經返回后,原來出現這種變化folders
對象,所以你最終有兩個引用指向不同的陣列。
最好的方法是從工廠內部返回實際的承諾,這樣,一旦承諾返回,您就可以引用正確的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.