angularjs – 在$routeProvider中使用解析导致’Unknown provider …’

前端之家收集整理的这篇文章主要介绍了angularjs – 在$routeProvider中使用解析导致’Unknown provider …’前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
看到这个帖子底部解决方

我正在尝试一个异步http请求,在我的应用程序加载之前加载一些数据,所以我在$ routeProvider中使用一个解决方案,这是我的MainController中的一个http请求。由于某些原因,我不断收到错误:[$ inject:unpr]未知提供者:appDataProvider< - appData其中appData是我做我的http请求。我使用AngularJS v 1.2.5。 这里是我尝试的代码和两个方法,都给出相同的错误方法#1 MainController.js

var MainController = ['$scope','$location','appData',function($scope,$location,appData){
       console.log(appData.data);
    }
];

MainController.loadData = {
    appData: function($http,MainFactory){
        var aid = MainFactory.extractAid($location);
        return $http({method: 'GET',url: URL_CONST + aid});
    }
};

app.js

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

app.config(function($routeProvider) {
  $routeProvider
    .when('/',{
      redirectTo: '/pages/alerts'
    })
    .when('/pages/:pageName',{
        templateUrl: function(params) {
            return 'views/pages/' + params.pageName + '.html';
        },controller: MainController,resolve: MainController.loadData
    })
    .otherwise({
        redirectTo: '/pages/alerts'
    });
});

我尝试更改名称,以防它是一个冲突的系统保留关键字,但没有运气。由于某种原因,appData从不被识别

方法#2
我也试过改变它像这样:

app.js

var app = angular.module('HEY',resolve: {
                appData: ['$http','MainFactory',function($http,MainFactory) {
                    var aid = MainFactory.extractAid($location);
                    return $http({method: 'GET',url: URL_CONST + aid});
                }]
        }
    })
    .otherwise({
        redirectTo: '/pages/alerts'
    });
});

MainController.js

var MainController = ['$scope',appData){
        console.log(resolvedData);
    }
];

但是结果完全一样。这是否与角1.2.5有关?

这是一个来自别人的工作版本

http://mhevery.github.io/angular-phonecat/app/#/phones

这里是代码

function PhoneListCtrl($scope,phones) {
  $scope.phones = phones;
  $scope.orderProp = 'age';
}

PhoneListCtrl.resolve = {
  phones: function(Phone) {
    return Phone.query();
  },delay: function($q,$defer) {
    var delay = $q.defer();
    $defer(delay.resolve,1000);
    return delay.promise;
  }
}

angular.module('phonecat',['phonecatFilters','phonecatServices','phonecatDirectives']).
  config(['$routeProvider',function($routeProvider) {
    $routeProvider.
        when('/phones',{templateUrl: 'partials/phone-list.html',controller: PhoneListCtrl,resolve: PhoneListCtrl.resolve}).
        otherwise({redirectTo: '/phones'});
  }]);

解:

问题不在于以前使用不同版本的AngularJS。

以下是使用上述代码的修复程序。

>在app.js中,您需要将控制器声明为控制器:
‘MainController’和NOT作为控制器:MainController甚至
虽然你有var MainController = app.controller(‘MainController’,
….)。
>第二个也是最大的事情是在我的index.html中我宣布了我的
控制器已经如此:

的index.html

body ng-app =“HEY”controller =“MainController”/ body

这是导致整个未知的提供程序错误显然,角度不会告诉你,你已经声明了您正在使用的控制器来解决它,这将导致一个奇怪的错误解决无关。

我希望这可以帮助有可能有同样问题的人。

这是我在我正在开发的应用程序中使用的代码的示例,不知道它将有多大帮助,因为它与您已经有很多不同。

路由

.when('/view/proposal/:id',{
    controller : 'viewProposalCtrl',templateURL : 'tmpls/get/proposal/view',resolve : viewProposalCtrl.resolveViewProposal
})

调节器

var viewProposalCtrl = angular.module('proposal.controllers')
    .controller('viewProposalCtrl',['$scope','contacts','details','rationale',contacts,details,rationale){
            $scope.contacts = contacts;
            $scope.details = details;
            $scope.rationale = rationale;

            // [ REST OF CONTROLLER CODE ]
        });


// proposalSrv is a factory service

viewProposalCtrl.resolveViewProposal = {
    contacts : ['$route','proposalSrv',function($route,proposalSrv){
        return proposalSrv.get('Contacts',$route.current.params.id)
           .then(function(data){
               return data.data.contacts;
           },function(){
               return [];
           });
    }],details : ['$route',proposalSrv){
        return proposalSrv.get('Details',$route.current.params.id)
            .then(function(data){
                return data.data.details;
            },function(){
                return {};
            });
    }],rationale : ['$route',proposalSrv){
        return proposalSrv.get('Rationale',$route.current.params.id)
            .then(function(data){
                return data.data.rationale;
            },function(){
                return {};
            ]
    }]
};

现在我想起来,当我开发我的应用程序时,我确实有一个问题,不知道为什么当我命名我的解决函数解决”。这给了我一个问题:

.when('/path',{
     // stuff here
     resolve : myCtrlr.resolve
})

但这没有:

.when('/path',{
     //stuff here
     resolve : myCtrlr.myResolveFn
})

另一个可能性

我唯一可以想到的其他事情是,您从$ http呼叫中返回承诺,然后尝试使用appData.data尝试使用.then函数或其他函数(.success,.error)到从承诺中检索信息。

猜你在找的Angularjs相关文章