我有一个AngularJS应用程序,并且需要在控制器初始化之前从REST API初始化数据。我使用"解决"在routeProvider中,还在控制器中注入相关值,以使这些数据可用。代码片段如下:
RouteProvider代码段:
myApp.config(function($routeProvider) {
$routeProvider
....
.when('/account', {
templateUrl : path + 'admin/js/pages/inputs/account.html',
controller : 'mainController',
resolve: {
data: function() {
return $http.get(api_path + 'dashboard/get_accounts');
}
}
})
myApp.controller('mainController', function($scope,$http, data, $routeParams, DataService) {
...
console.log(data);
}
控制台应该显示数据,我得到以下错误"错误:[$ injector:unpr]未知提供者:dataProvider< - data"
非常感谢您的帮助。
答案 0 :(得分:0)
这是因为数据提供程序尚未实例化,它在提供程序准备就绪之前实例化控制器,作为未定义和未知的提供程序进行实现。
尝试这样的返回承诺的内容:
myApp.config(function($routeProvider, $q) {
$routeProvider, $q
....
.when('/account', {
templateUrl : path + 'admin/js/pages/inputs/account.html',
controller : 'mainController',
resolve: {
data: function() {
return $q.all($http.get(api_path + 'dashboard/get_accounts'));
}
}
})
现在,在promise完全解决之前,控制器不会实例化。根据$ routeProvider的文档以及它如何处理解决方案中的promise。
Angular网站上的resolve - {Object。=} - 应该注入控制器的可选依赖关系图。如果这些依赖项中的任何一个是promise,路由器将等待它们全部被解析或者在实例化控制器之前被拒绝。如果成功解决了所有promise,则会注入已解析的promise的值并触发$ routeChangeSuccess事件。如果任何promise被拒绝,则触发$ routeChangeError事件。