2015-04-27 101 views
0

我想將JSON的數據存儲在服務中的共享數組中。問題是每次我想用一些新的內容(例如新的JSON)更新服務的數組時,我需要先清除數組,然後數組保持爲空,而不是加載新數據。角度服務陣列空

我的服務是這樣的:

.service('jsonTest', 
    function() { 
     var json = []; 

     function storeJson(file) { 
     json=[]; 
     json.push(file); 
     } 
     return { 
     storeJson: storeJson, 
     showJson: json 
     } 
    }); 

正如你所看到的,我每次清洗陣列

json = []; 

加載新數據之前,但後來它仍然加載新的後空東東。

我在這裏做錯了什麼?

您可以在這裏查看該示例:http://plnkr.co/edit/tN9WvNminw1uLpThWPvu?p=preview 該服務位於app.js中,正在MainCtrl(main.js)和ProductCtrl(product.js)中使用。

有什麼建議嗎?

回答

1

你每次改變時都不會看json和更新showJson。你需要做的是這樣的:

.service('jsonTest', function() { 
    var json = { 
    showJson: [], 
    storeJson: function(file) { 
     json.showJson=[]; 
     json.showJson.push(file); 
    } 
    }; 

    return json; 
}); 

因爲json是一個局部變量,當你把它設置爲[]裏面storeJson,它使用新的存儲位置,即它不是一個參考變量,所以showJson是不會自動更新。如果您正在清除現有數組(可能通過.pop,直到沒有元素離開),它會起作用,但由於您正在分配空數組,因此它不會。

或者,您也可以使showJson函數返回json。那也行得通。

.service('jsonTest', function() { 
    var json = []; 

    function storeJson(file) { 
    json=[]; 
    json.push(file); 
    } 
    function showJson() { 
    return json; 
    } 
    return { 
    storeJson: storeJson, 
    showJson: showJson 
    } 
}); 
+0

現在我看到問題出在哪裏;)謝謝! –

1

我認爲你應該使用空對象而不是數組。

.service('jsonTest', function() { 
    var json = {}; 
    return { 
     set: function(val){ 
      json = val; 
     }, 
     get: function(){ 
      return json; 
     } 
    }; 
}); 

更新你Plunker

+0

這很好,謝謝。 –

0

也許,更好的結構是將$ HTTP調用服務本身,所以其真正的服務。 Tben將服務注入MainCtrl。

所以,你可以調用服務(可以稱之爲 'myAppService'),如:

.controller('MainCtrl', ['$scope', '$log', 'myAppService', 
    function ($scope, $log, myAppService) { 

     $scope.getData = function(filepath) { 
      // do something with results ie. store etc. 
      var fileOrPromise = myAppService.get(filepath); 
     }; 
]); 

和服務/工廠:

.factory('myAppService', ['$http', '$q', '$window', 
    function($http, $q, $window) { 
     return { 
      get: function(filepath) { 
      return _goGetFile(filepath); 
      }, 
      // do something else 
     }; 
    } 
    ]); 

下面是一些參考設計和最佳做法:

  1. johnpapa
  2. scotch.io

希望這會有所幫助。