Angular服务数组为空

时间:2015-04-27 16:00:40

标签: angularjs angular-ui angular-services

我正在尝试将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)中使用。

请问任何建议?

3 个答案:

答案 0 :(得分:1)

你不会每次看到json并更新showJson。您需要执行以下操作:

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

  return json;
});

由于json是一个局部变量,当您在[]内将其设置为storeJson时,它会使用新的内存位置,即它不是引用变量,因此showJson不会自动更新。如果你正在清除现有的数组(可能是.pop,直到没有剩下的元素),它会起作用,但是因为你正在分配一个 new 空数组,所以它不会#&# 39;吨

或者,您也可以将showJson作为返回json的函数。那也行。

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

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

答案 1 :(得分:1)

我认为你应该使用空对象而不是数组。

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

更新了您的Plunker

答案 2 :(得分:0)

或许,更好的结构是将$ http调用移动到服务本身,因此它真正的服务。 Tben将服务注入MainCtrl。

因此,您可以调用服务(让我们称之为' myAppService'),如:

$(document).ready(function() {
    $("#submitButton").click(addListItem);
});

function addListItem() {
    var $entryText = $("#entry").val();
    $("#list").append("<li>" + $entryText + "</li>");
}

和服务/工厂:

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

以下是对设计和最佳实践的一些参考:

  1. johnpapa
  2. scotch.io
  3. 希望这有帮助。