Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度工厂中的变量范围_Javascript_Angularjs_Underscore.js_Scope_Angularjs Factory - Fatal编程技术网

Javascript 角度工厂中的变量范围

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 })) 这是我的

我试图在angular factory的return语句中修改folders变量(数组),但它似乎只适用于我编写的create操作。我想我不了解变量范围在工厂中的工作方式

这项工作:

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=”更改为拼接方法以更改实际数组。谢谢