2015-07-10 53 views
2

我有以下配置,我有一個配置,其中使用$ http.get方法調用url並將數據存儲在變量「alpha」中。我如何從控制器訪問這個變量。我試圖將$ rootScopeProvider注入到配置中,並嘗試設置$ rootScope.pqr = alpha。這給出了一個錯誤。我該怎麼做?從angular.module配置獲取數據到相應的控制器

angular.module('thisApp', [someDependencies]).config(function($stateProvider, $urlRouteProvider) { 
    $http.get('url').then(function(response) { 
     var alpha = response.data; // i need to access this data in the controller 
    )}; 
}).directive('pqrTitle', function() { 
    return { 
     restrict: 'A', 
     controller: function($scope, $rootScope) { 

     // I need to access alpha here 
    }); 
}); 

我該怎麼做?

+4

你是如何從你的配置塊存取'$ http'得到變量的值? – rob

回答

1

如果您正在使用的用戶界面 - 路由器演員,你可以使用$ futureStateProvider對於這一點,你可以也可以使用$ rootScope並在控制器中訪問它

angular.module('thisApp', [someDependencies]) 
.config(function($futureStateProvider, $stateProvider, $urlRouteProvider) { 

    $futureStateProvider.addResolve(['$http', '$rootScope', function($http, $rootScope) { 
     $http.get('url').then(function(response) { 
      $rootScope.alpha = response.data; 
     )}; 
    }]); 
}) 

1)在控制器中,您應該注入rootScope並訪問該變量。 2)如果您不想使用rootScope,創建一個服務並將其注入到$ futureStateProvider.addResolve中,請在該服務中設置該變量。之後,你可以通過一個getter函數

希望它可以幫助

+0

謝謝,我得到它的工作 – clearScreen

2

其實我很想知道你是如何在配置階段獲得$http服務的。您只能根據documentation配置供應商和負荷常數在該階段:

Configuration blocks - get executed during the provider registrations and configuration phase. Only providers and constants can be injected into configuration blocks. This is to prevent accidental instantiation of services before they have been fully configured.

當我嘗試注入一個服務爲一體的配置階段我得到以下錯誤:link

最好的辦法是編寫一個服務來從你想要的服務器獲取信息並將該服務注入到你的指令中。 (而在其他地方,你需要它)

例子:(working例子是更廣泛的)

.controller('TestController', function(alphaService) { 
    var self = this; 

    self.alpha = alphaService.get().success(function(data) { 
    self.alpha = data; 
    }); 
}) 

.factory('alphaService', function($http) { 
    return { 
    get: function() { 
     return $http.get('url'); 
    } 
    }; 
}) 

.directive('myDir', function(alphaService) { 
    return { 
    restrict: 'E', 
    link: function (scope, element, attr) { 
     scope.alpha = null; 

     alphaService.get().success(function(data) { 
     scope.alpha = data; 
     }); 
    }, 
    templateUrl: 'mydir.html' 
    }; 
}); 
相關問題