AngularJS,解析和未知提供程序
我有两条坚定的路线。是这样的:AngularJS,解析和未知提供程序,angularjs,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
.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) {...}
然后我有两个控制器像这样工作:
.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) {...}
有人能解释一下为什么Bar可以工作,但是Foo给了我
错误:未知提供者:Foo_listProviderFoo_list所以,这个问题与我自己的问题惊人地相似,我刚刚在Angular IRC频道的人的帮助下发现了这个问题。。。您是否碰巧通过ng controller
设置了控制器?我有:
<div ng-controller="myCtrl">
。。。应将其移除的时间:
<div>
。。。因为我在路由器上的resolve中设置控制器。这就是我所做的,它导致了这个问题。您可以在此处看到更多信息:
作为提示,我刚刚遇到了一个类似的问题,这是由于在$stateProvider.state()
中尚未设置响应函数的情况下,将resolve变量作为依赖项添加到控制器而导致的
添加解析函数修复了缺少的依赖项
(我还是不太明白为什么——如果有人能在评论中分享他的知识,我会很高兴)你确定酒吧管用吗?可能您不会在Bar上得到任何错误,因为Foo正在失败,并且Bar甚至没有被创建/定义。您是否尝试更改初始顺序?是的。酒吧工作得很好——这就是为什么我对此感到沮丧和困惑的原因。几周前我做了应用程序的Bar部分,现在我也想将resolve应用到Foo。如果你在BarsCtrl
中访问Bar
,你会得到什么?它是否包含任何内容或只是未定义?bar
正确地从getBar传递数据。就像我说的,酒吧不是问题,而且似乎工作得很好。如果我在没有解析的情况下回滚到旧版本,Foo也可以工作。在创建foo_list promise和启动FooCtrl控制器之间,似乎有些地方迷失了方向。您的successCb in bar函数缺少一个右括号,因此,我想知道这为什么不会给您带来语法错误。foo_list
应该是承诺解析的,并根据路由的resolve
属性按名称注入。这将导致未知提供程序错误消失,但现在foo_list没有绑定到resolve中的foo_list…它只是一个未定义的变量。您被锁定了这个问题对我来说,回想起来很明智。谢谢非常感谢。在升级到angularjs 1.3-beta版后,我已经暗地里与代码斗争了一周。我应该仔细看一下文档(叹气)。所以。。。删除ng controller=会修复我的“未知提供程序”错误。。。但它也会导致页面变为空白,并且在控制器内无任何内容运行(甚至包括console.log(“hello”))。我很困惑-如果HTML中没有任何内容调用控制器。。。那么控制器永远不会被调用。我错过了什么?2016年,仍然在拯救生命!状态中的响应函数是什么?你能举例说明吗?当然。不是响应函数,而是解析函数。当您需要控制器上的某个变量.controller('fooCtrl',function(someRequire){…})时,就会发生这种情况当(“…”,{resolve:{notDefineSomeRequire:[…]}})时,{code>没有对需要定义的的进行解析。查看演示并将其与(注意fooState
上添加的解析)进行比较奇怪的是,我有解析函数,它返回一个承诺。在我的控制器中,数据正常输入,但随后会抛出我命名参数的未知错误提供程序。也就是说,在你的小提琴中,我会得到一个foo_列表提供程序错误。这很奇怪。我可以看到,当我在控制器中设置断点时,数据被发送到控制器。代码被执行,一旦它离开控制器,Angular就会抛出错误。在这种情况下,创建一个新的问题并在这里链接它