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)到从承诺中检索信息。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
