gpt4 book ai didi

angularjs - 如何在 angular.factory 中存储来自http服务的数据

转载 作者:行者123 更新时间:2023-12-03 00:12:01 26 4
gpt4 key购买 nike

我想使用服务全局存储/api/login.json 中的值,但我认为我遇到了某种计时问题。 Controller 中的console.log语句告诉我scope.login对象未定义。

我错过了什么?

谢谢!

工厂服务:

myApp.factory('LoginFactory', ['$http', function($http){

this.data;
$http.get('/api/login.json').success(function(data) {
this.data = data;
});

return {
getData : function(){
return this.data;
}
}
}]);

Controller :

myApp.controller('AccountsCtrl', ['$scope', 'Accounts', 'LoginFactory', function($scope, Accounts, LoginFactory){
$scope.login = LoginFactory.getData();
console.log('$scope.login: %o', $scope.login);
$scope.accounts = Accounts.index();

}]);

最佳答案

您应该避免在这种情况下使用 this 关键字。最好只是声明一个新变量。

myApp.factory('LoginFactory', ['$http', function ($http) {
var data;
$http.get('/api/login.json').success(function (d) {
data = d;
});
return {
getData: function () {
return data;
}
};
}]);

尽管如此,你仍然会遇到竞争问题,所以我还建议使用 promise 链

myApp.factory('LoginFactory', ['$http', function ($http) {
var promise = $http.get('/api/login.json');
return {
getData: function (callback) {
promise.success(callback);
}
};
}]);

甚至是有条件的获取

myApp.factory('LoginFactory', ['$http', function ($http) {
var data;
return {
getData: function (callback) {
if(data) {
callback(data);
} else {
$http.get('/api/login.json').success(function(d) {
callback(data = d);
});
}
}
};
}]);

最后两种方法需要您重写 Controller

myApp.controller('AccountsCtrl', ['$scope', 'Accounts', 'LoginFactory', function($scope, Accounts, LoginFactory){
LoginFactory.getData(function(data) {
$scope.login = data;
console.log('$scope.login: %o', $scope.login);
$scope.accounts = Accounts.index(); //this might have to go here idk
});
}]);

关于angularjs - 如何在 angular.factory 中存储来自http服务的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27386092/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com