Javascript 角度工厂中的变量范围
我试图在angular factory的return语句中修改folders变量(数组),但它似乎只适用于我编写的create操作。我想我不了解变量范围在工厂中的工作方式 这项工作:Javascript 角度工厂中的变量范围,javascript,angularjs,underscore.js,scope,angularjs-factory,Javascript,Angularjs,Underscore.js,Scope,Angularjs Factory,我试图在angular factory的return语句中修改folders变量(数组),但它似乎只适用于我编写的create操作。我想我不了解变量范围在工厂中的工作方式 这项工作: folders.push(response.folder) 但是。。。当我使用underline.js函数without(返回数组)时,它不会改变folder变量 folders = _.without(folders, _.findWhere(folders, {id: folder.id })) 这是我的
folders.push(response.folder)
但是。。。当我使用underline.js函数without(返回数组)时,它不会改变folder变量
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;
}
}
});
创建函数返回一个更新的文件夹变量,而销毁函数返回一个未更改的文件夹变量。
。不返回一个新数组,请参阅,这样您就可以有效地更改文件夹
指向的位置。但是,由于您仅在承诺解决后才调用。
,即在内部调用,因此只有在您返回原始文件夹
对象后才会发生此更改,因此您最终会得到指向不同数组的两个引用
从工厂内部返回实际承诺可能是最佳做法,这样,一旦承诺返回,您就可以引用正确的数据。删除指针并将“folders=”更改为拼接方法以更改实际数组。谢谢