angularjs – 在$routeProvider中使用解析导致’Unknown provide
看到这个帖子底部的解决方案
我正在尝试一个异步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中,您需要将控制器声明为控制器: 的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)到从承诺中检索信息。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |