2014-10-31 26 views
-1

我有一個簡單的Angular控制器和一個服務如下。問題是我的服務總是返回null,因爲它比$ http.get()成功承諾更早完成執行。由於其異步特性,這在JavaScript等語言中很常見。Angular Service中的Asynchronus計時問題

任何人都可以請建議什麼是最好的方式來處理Angular應用程序?

var app = angular.module('User', []); 

app.controller('userController', ['$scope', 'userService', function($scope, userService){ 

    $scope.name = userService.getName(); 

}]); 

app.service('userService', ['$http', function($http){ 

    getName = function(){ 
    var userName; 
    $http.get('/api/user.json').success(function(data){ 
     userName = data.name; 
    }); 
    return userName; 
    } 

}]); 

回答

1

改變你的服務,如:

app.service('userService', ['$http', function($http){ 
    return { 
    getName: function(){return $http.get('/api/user.json');} 
    } 
}]); 

而且您的控制器,就像這樣:

app.controller('userController', ['$scope', 'userService', function($scope, userService){ 
    userService.getName().success(function(data){ 
     $scope.name = data.name; 
    }); 
}]); 
-1

查覈在您正在使用的路由器的決心功能。我通常使用UI.router,但我相信該功能也可以在默認路由器中使用。這是確保您在執行控制器代碼之前擁有數據的一種方法。