我正在尝试更改我的 Angular 工厂的返回语句中的文件夹变量(一个数组),但它似乎只适用于我编写的创建操作。我想我不理解变量作用域在工厂中的工作方式。
这有效:
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;
}
}
});
创建函数返回更新的文件夹变量,但销毁函数返回未更改的文件夹变量。
最佳答案
_.without
返回一个新数组,请参阅 docs ,因此您可以有效地更改 folders
指向的位置。但是,由于您仅在 promise 解决后才调用 _.without
,即在 then
内部,因此只有在您返回原始 文件夹
后才会发生此更改> 对象,因此最终会得到两个指向不同数组的引用。
最好的做法可能是从工厂内部返回实际的 Promise,这样您就可以在 Promise 返回后引用正确的数据。
关于javascript - Angular 工厂中的变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21444688/