角度工厂中的可变范围

时间:2014-01-29 23:11:29

标签: javascript angularjs underscore.js scope angularjs-factory

我正在尝试在我的角度工厂的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。

1 个答案:

答案 0 :(得分:1)

_.without会返回一个新数组,请参阅docs,以便您有效地更改folders所指向的位置。但是,由于只有在promise解析后才调用_.without,即在then内部,只有在返回原始folders对象后才会发生此更改,因此最终会有两个引用指向不同的阵列。

从工厂内部返回实际的承诺可能是最佳做法,这样一旦承诺返回,您就可以引用正确的数据。