Angularjs 角度服务阵列空

Angularjs 角度服务阵列空,angularjs,angular-ui,angular-services,Angularjs,Angular Ui,Angular Services,我试图将JSON的数据存储在服务中的共享数组中。问题是,每次我想用一些新内容(例如新JSON)更新服务的数组时,我都需要首先清除数组,然后数组保持为空,而不是加载新数据 我的服务如下所示: .service('jsonTest', function() { var json = []; function storeJson(file) { json=[]; json.push(file); } return

我试图将JSON的数据存储在服务中的共享数组中。问题是,每次我想用一些新内容(例如新JSON)更新服务的数组时,我都需要首先清除数组,然后数组保持为空,而不是加载新数据

我的服务如下所示:

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

      function storeJson(file) {
        json=[];
        json.push(file);
      }
      return {
        storeJson: storeJson,
        showJson: json
      }
    });
如您所见,我每次在加载新数据之前都会清理阵列

json = [];
但在加载新内容后,它仍然是空的

我做错了什么

您可以在此处查看该示例: 该服务位于app.js中,并在MainCtrl(main.js)和ProductCtrl(product.js)中使用


有什么建议吗?

您没有在每次更改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
  }
});

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

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

更新您的

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

所以,您可以调用服务(我们称之为“myAppService”),如下所示:

以及服务/工厂:

 .factory('myAppService', ['$http', '$q', '$window',
    function($http, $q, $window) {
      return {
          get: function(filepath) {
             return _goGetFile(filepath);
          },
          // do something else
      };
    }
  ]);
以下是一些关于设计和最佳实践的参考:


  • 希望这能有所帮助。

    现在我知道问题出在哪里了;)非常感谢。
     .factory('myAppService', ['$http', '$q', '$window',
        function($http, $q, $window) {
          return {
              get: function(filepath) {
                 return _goGetFile(filepath);
              },
              // do something else
          };
        }
      ]);