JVG*_*JVG 34 javascript angularjs angularjs-service
我在Angular中有一个服务,它使用我的API获取用户信息并将其提供给我的控制器.它的设置如下:
angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives', 'ngResource', 'infinite-scroll', 'ui.bootstrap', 'ngCookies', 'seo'])
.service('userInfo', function($http, $cookies){
$http.get('/api/users/' + $cookies.id).
success(function(data) {
var userInfo = data.user[0];
return userInfo;
});
}). // other stuff comes after this
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我包括它:
function userProfile($scope, $cookies, userInfo, $http, $resource, $routeParams, $rootScope){
$scope.user = userInfo;
console.log('user info is')
console.log(userInfo);
Run Code Online (Sandbox Code Playgroud)
这没有返回数据,而如果我在控制器本身放置相同的服务功能,它返回就好了.我在这里错过了什么?从来没有在Angular中使用DI/Services,因此在某处可能是一个简单的错误.
我需要确保服务在控制器加载之前返回数据.如何实现这一目标
zs2*_*020 42
你可以让工厂返回这样的承诺:
angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives', 'ngResource', 'infinite-scroll', 'ui.bootstrap', 'ngCookies', 'seo'])
.service('userInfo', function ($http, $cookies) {
var promise = $http.get('/api/users/' + $cookies.id).
success(function (data) {
var userInfo = data.user[0];
return userInfo;
});
return promise;
}) // other stuff comes after this
Run Code Online (Sandbox Code Playgroud)
在你的控制器中,做
function userProfile($scope, $cookies, userInfo, $http, $resource, $routeParams, $rootScope){
userInfo.then(function(data){
$scope.user = data;
});
}
Run Code Online (Sandbox Code Playgroud)
这可以保证无论何时使用该服务,它总是同步为您提供数据,您不必在加载控制器之前加载任何数据.
Jos*_*ber 17
您的userInfo服务必须返回由您返回的承诺$http.然后将该承诺注入您的控制器,一旦承诺成功解决,视图将立即更新.
如果你不想在userInfo结算之前完全呈现视图,你应该resolve在你的路线上设置一个属性,并在那里注入你的服务:
$routeProvider.when('/profile', {
templateUrl: 'profile',
controller: userProfile,
resolve: {
userInfoData: function ($q, userInfo) {
return userInfo;
}
}
});
Run Code Online (Sandbox Code Playgroud)
然后注入userInfoData您的控制器代替userInfo服务.
| 归档时间: |
|
| 查看次数: |
38127 次 |
| 最近记录: |