javascript - AngularJS [$注入(inject)器 :unpr] Unknown provider: dataProvider <- data <- PageCtrl

标签 javascript angularjs

我看过其他答案,但到目前为止没有任何帮助。我通过文件中的以下代码收到此错误:

   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/

相关文章:

javascript - Neo4j REST 返回节点,但不返回关系

javascript - 服务页面,AngularJS 与 Node JS

javascript - jquery 宽度切换动画在动画发生期间显示垂直单元格

AngularJS - 单击不同 div 中的项目时滚动 div 容器

angularjs - $httpProvider请求拦截器-获取参数

javascript - 在 node.js 服务器上生成 URL

javascript - Angular 在构造函数外部的函数中返回未定义

javascript - 使用工厂和 Controller 返回数据

javascript - Angular JS 中用于 IP 地址验证的 ng-pattern

javascript - 根据浏览器显示DIV并根据浏览器版本添加类