我看过其他答案,但到目前为止没有任何帮助。我通过文件中的以下代码收到此错误:
angular.module('myApp.page', ['ngRoute'])
.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/page/:pageId', {
templateUrl: 'page/view.html',
controller: 'PageCtrl',
resolve: {
data: function($q, $http, $routeParams) {
var deferred = $q.defer();
$http({method: 'GET', url: 'http://....' + $routeParams.pageId})
.then(function(data) {
deferred.resolve(data);
});
return deferred.promise;
}
}
})
}])
.controller('PageCtrl', function ($scope, $rootScope, data) {
//do stuff
}
在 app.js 中我有这个:
angular.module('myApp', [
'ui.bootstrap',
'ngRoute',
'ngTouch',
'ngResource',
'myApp.page'
]).
config(['$routeProvider', function($routeProvider) {
$routeProvider.otherwise({redirectTo: '/'});
}]).
config(['$provide', Decorate])
一切正常,我使用 HTTP 方法毫无问题地获取数据,直到我开始使用 Q 库并将数据获取移至配置部分。有小费吗?其他答案似乎都不起作用。提前致谢!
最佳答案
你的问题是因为你正在使用 ng-controller
指令来实例化 Controller PageCtrl
它需要一个动态依赖 data
仅由路由器创建。因此,当您通过路由器解析注入(inject)动态依赖项并让路由器实例化 Controller 时,您不需要也不应该通过 ng-controller
实例化 Controller ,由于缺乏依赖性,它只会失败从注入(inject)器的可用性。路由器将管理 Controller 的实例化并为您设置相应的 View 。
所以只需从您的 View 中删除 ng-controller 还要确保路由表示的部分足够完整以表示与 Controller 功能相关的 View 。我还看到,最好不要从使用 ng-controller
的局部 View 开始并使用路由进行实例化,这将有助于使该局部 View 更易于与不同的 Controller 重用。此外,在创建单元测试时,您可以轻松模拟动态依赖项并通过 $controller
服务提供它。
关于javascript - AngularJS [$注入(inject)器 :unpr] Unknown provider: dataProvider <- data <- PageCtrl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30107574/