我正在尝试在我的角度工厂的return语句中更改文件夹变量(数组),但它似乎只适用于我编写的创建操作。我想我不了解变量范围在工厂中的工作方式。
这有效:
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。
答案 0 :(得分:1)
_.without
会返回一个新数组,请参阅docs,以便您有效地更改folders
所指向的位置。但是,由于只有在promise解析后才调用_.without
,即在then
内部,只有在返回原始folders
对象后才会发生此更改,因此最终会有两个引用指向不同的阵列。
从工厂内部返回实际的承诺可能是最佳做法,这样一旦承诺返回,您就可以引用正确的数据。