簡體   English   中英

角度工廠中的可變范圍

[英]variable scope in an angular factory

我正在嘗試更改我的角度工廠的return語句內的folders變量(數組),但它似乎僅對我編寫的create動作有效。 我認為我不了解變量作用域在工廠中的工作方式。

這有效:

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。

_.without返回一個新數組,請參閱docs ,因此您可以有效地更改folders指向的位置。 然而,由於您呼叫_.without只有一次承諾解決,即內部then只會您已經返回后,原來出現這種變化folders對象,所以你最終有兩個引用指向不同的陣列。

最好的方法是從工廠內部返回實際的承諾,這樣,一旦承諾返回,您就可以引用正確的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM