gpt4 book ai didi

angularjs - angular.factory 返回 promise

转载 作者:行者123 更新时间:2023-12-03 06:40:29 24 4
gpt4 key购买 nike

当我的应用程序启动时,我从服务器加载一些设置。我的大多数 Controller 在做任何有用的事情之前都需要这个。我想尽可能简化 Controller 的代码。我的尝试是这样的,但没有成功:

app.factory('settings', ['$rootScope', '$http', '$q', function($rootScope, $http, $q) {
var deferred = $q.defer();

$http.get('/api/public/settings/get').success(function(data) {
$rootScope.settings = data;
deferred.resolve();
});

return deferred.promise;
}]);

app.controller('SomeCtrl', ['$rootScope', 'settings', function($rootScope, settings) {
// Here I want settings to be available
}]);

我想避免到处都有很多 settings.then(function() ...) 。

关于如何以良好的方式解决这个问题有什么想法吗?

最佳答案

$http 本身返回 promise ,您不需要将其绑定(bind)在 $q 内,这不是一个好的做法,被视为反模式。

用途:-

    app.factory('settings', ['$rootScope', '$http', '$q', function($rootScope, $http) {
return $http.get('/api/public/settings/get')
}]);

app.controller('SomeCtrl', ['settings',$scope, function(settings,$scope) {
settings.then(function(result){
$scope.settings=result.data;
});
}]);

你的方式可以完成:-

app.factory('settings', ['$rootScope', '$http', '$q', function($rootScope, $http, $q) {
var deferred = $q.defer();

$http.get('/api/public/settings/get').success(function(data) {
deferred.resolve(data);
});

return deferred.promise;
}]);

app.controller('SomeCtrl', ['$scope', 'settings', function($scope, settings) {
settings.then(function(data){
$scope.settings=data;
})
}]);

不要重载$rootScope,如果你想要它,你需要使用$watch来更改$rootScope(不推荐)。

关于angularjs - angular.factory 返回 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28830003/

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