Angularjs 角度服务阵列空
我试图将JSON的数据存储在服务中的共享数组中。问题是,每次我想用一些新内容(例如新JSON)更新服务的数组时,我都需要首先清除数组,然后数组保持为空,而不是加载新数据 我的服务如下所示: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
.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
};
}
]);