javascript - Angular 工厂中的变量范围

标签 javascript angularjs underscore.js scope angularjs-factory

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

这有效:

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;
        }
    }
});

创建函数返回更新的文件夹变量,但销毁函数返回未更改的文件夹变量。

最佳答案

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

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

关于javascript - Angular 工厂中的变量范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21444688/

相关文章:

javascript - 使用 Create React App 的静态 HTML 登录页面

javascript - 禁用印地文字符作为输入类型数字的输入

javascript - Angular 指令无法访问 DOM 树中的 Controller

javascript - 另一个 div 上的 AngularJS 可折叠/切换类

javascript - 无法使用 UnderscoreJS 的 every 函数传递额外的参数

javascript - 检测 Node.js 中的硬链接(hard link)

unit-testing - 测试 AngularJS 范围变量

javascript - Backbone.js 事件未触发

javascript - 条件合并2个二维数组

javascript - 使用 colorbox 定位 iframe 元素