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){…})时,就会发生这种情况没有对需要定义的
的进行解析。查看演示并将其与(注意
fooState
上添加的解析)进行比较奇怪的是,我有解析函数,它返回一个承诺。在我的控制器中,数据正常输入,但随后会抛出我命名参数的未知错误提供程序。也就是说,在你的小提琴中,我会得到一个foo_列表提供程序错误。这很奇怪。我可以看到,当我在控制器中设置断点时,数据被发送到控制器。代码被执行,一旦它离开控制器,Angular就会抛出错误。在这种情况下,创建一个新的问题并在这里链接它