1

我试图在我的角度工厂的返回语句中更改文件夹变量(一个数组),但它似乎只适用于我编写的创建操作。我想我不了解变量范围在工厂中的工作方式。

这有效:

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。

4

1 回答 1

1

_.without返回一个新数组,请参阅docs,因此您正在有效地更改folders指向的位置。但是,由于您_.without只在承诺解决后才调用,即then只有在您返回原始对象后才会发生这种更改,folders因此您最终会得到两个指向不同数组的引用。

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

于 2014-01-29T23:35:58.683 回答