我试图在控制器之间共享数据。 我调用数据,然后存储在AngularJS Factory变量中。 存储数据时我的目标是让任何控制器都可以访问它。但是在应用程序中,每当我从每个控制器调用存储的数据时,似乎我得到了我的工厂的新实例,而不是我已经包含数据的工厂。
你觉得我在使用工厂时做错了吗?或者有些东西我错过了?
这是
工厂代码:
var Credentials = ['abc'];
function load() {
var service = HeaderService.get("api/CredentialsAPI/get");
service.then(function (response) {
if (response.status == 200)
Credentials = response.data;
});
alert("inside:" + Credentials.length);
}
load();
return {
SubmitCredentials : function (obj) {
angular.forEach(obj, function (value) {
Credentials.push(value);
});
},
GetCredentials : function (name) {
var datax = {};
alert(Credentials.length)
angular.forEach(Credentials, function (value) {
if (value.Name == name) {
datax = value;
}
});
return datax;
}
}
家庭控制器:
loadHome();
function loadHome() {
$scope.Credentials = CredentialsService.GetCredentials("Task");
}
AssignTask的
$scope.showSubmitView = false;
//----------------------------------function--------------------------------------
$scope.Credentials[] = CredentialsService.GetCredentials("Task");
答案 0 :(得分:0)
您每次都引用一个新数组。这就是你获得新数据的原因。您应该引用该服务,并让服务处理push()
并为您服务。
工厂和服务是单身人士...意思是他们只被实例化一次。共享数据的模式如下:
<强>工厂强>
app.factory('CredentialService',["$http", function($http) {
var credentials = [];
var submitCredentials = function(obj) {
angular.forEach(obj, function(value) {
credentials.push(value);
});
}
var getCredentials = function(name) {
var datax = {};
if(credentials.length === 0)
return datax;
angular.forEach(credentials, function(value) {
if(value.Name === name) {
datax = value;
break; //i think you meant to break; over here
}
});
return datax;
}
//return the service;
return {
getCredentials: getCredentials,
submitCredentials: submitCredentials
};
}]);
<强>控制器强>
app.controller("Ctrl1", ["$scope", "CredentialService", function($scope, CredentialService) {
var credObj = CredentialService.getCredentials('blahblahblah');
var someNewCredObj = 'blahhhh';
CredentialService.submitCredentials(someNewCredObj);
}]);