【问题标题】:variable scope in an angular factory角度工厂中的变量范围
【发布时间】:2014-01-30 07:35:58
【问题描述】:

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

这行得通:

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。

【问题讨论】:

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


    【解决方案1】:

    _.without 返回一个新数组,请参阅docs,因此您实际上更改了folders 指向的位置。但是,由于您仅在 promise 解决后才调用 _.without,即在 then 内部,只有在您返回原始 folders 对象后才会发生此更改,因此您最终会得到两个指向不同数组的引用。

    从工厂内部返回实际的 Promise 可能是最佳实践,这样您可以在 Promise 返回后引用正确的数据。

    【讨论】:

    • 删除了指针并将“文件夹=”更改为拼接方法以更改实际数组。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 2016-06-23
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多