AngularJS,解决和未知的提供者
我有两条解决路线。 像这样:
.when('/foos', { templateUrl: 'views/foos.html', controller: 'FoosCtrl', resolve: { foo_list: ['$q', '$route', '$timeout', '$location', 'Foos', function($q, $route, $timeout, $location, Foos) { // postpone the execution var deferred_foo = $q.defer() Foos.getFoos({token:session_uid}, successCb) function successCb(list) { if(list['status'] === 200) { deferred_foo.resolve(list) } else { alert('Crashcrashcrash') deferred_foo.reject("Something just wasn't right") //$location.path('maintenance') } } return deferred_foo.promise }] } }) .when('/r/:type/:bar_id', { templateUrl: 'views/bar.html', controller: 'BarsCtrl', resolve: { bar: ['$q', '$route', '$timeout', '$location', 'Bars', function($q, $route, $timeout, $location, Bars) { // postpone the execution var deferred = $q.defer() Bars.getBar({type: bar_type}, successCb) function successCb(result) { if(result['status'] === 200) { deferred.resolve(result) } else { alert('Crashcrashcrash') deferred.reject("Something just wasn't right") $location.path('foos') } return deferred.promise }] } })
然后我有两个控制器这样工作:
App.controller('FoosCtrl', ['$scope', '$location', 'Foos', 'foo_list', function($scope, $location, Foos, foo_list) {...} App.controller('BarsCtrl', ['$scope', '$routeParams', '$location', 'Bars', 'bar', 'sharedService', function($scope, $routeParams, $location, Bars, bar, sharedService) {...}
有人可以解释为什么酒吧的作品,但Foo给我Error: Unknown provider: foo_listProvider <- foo_list
? 我尝试用不同的名称replacefoo_list
,以防驼峰做了一些事情,但没有帮助。
所以,这个问题和我自己的问题非常相似,我只是在Angular IRC频道的帮助下find了自己的想法…你是否偶然地通过ng-controller
设置你ng-controller
? 我有:
<div ng-controller="myCtrl">
…应该被删除的时候:
<div>
…因为我在路由器的解决scheme中设置了控制器。 这就是我正在做的,这是造成这个问题。 你可以在这里看到更多:
foo_list < – 是这个被加载到脚本标记的HTML页面中的js文件吗? 当你忘记包含工厂/服务/控制器并且实际上已经忘记将其包含在索引/应用程序html页面的脚本标记中(或者需要垫片)时,
好吧刚刚看到你的评论,并在这里扩大答案,因为这里更容易做到这一点。
你声明控制器的代码应该是这样的
App.controller('FoosCtrl', ['$scope', '$location', 'Foos', /* comment out foo_list here*/ function($scope, $location, Foos, foo_list /* this remains */) { ... }
当路由得到改变时,你在'resolve'中提到的东西将被ui-router解决。 但它是你声明你的FoosCtrl的地方,你实际上没有提供它来解决。
试试这个例子吧,上周有类似的情况发生。
就像刚才提到的那样,我只是遇到了一个类似的问题,这个问题是由于将控制variables作为依赖项添加到控制器中,而没有在$stateProvider.state()
中设置响应$stateProvider.state()
。
添加parsing函数修复了缺失的依赖关系
(我仍然不明白为什么 – 如果有人可以在评论中分享他的知识,我会很高兴)