AngularJS,解析和未知的提供者 [英] AngularJS, resolve and unknown provider

查看:39
本文介绍了AngularJS,解析和未知的提供者的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两条路线有决心.是这样的:

.when('/foos', {templateUrl: 'views/foos.html',控制器:'FoosCtrl',解决: {foo_list: ['$q', '$route', '$timeout', '$location', 'Foos', function($q, $route, $timeout, $location, Foos) {//推迟执行var deferred_foo = $q.defer()Foos.getFoos({token:session_uid}, successCb)函数 successCb(list) {如果(列表['状态'] === 200){deferred_foo.resolve(list)}别的 {警报('崩溃崩溃')deferred_foo.reject("有些不对劲")//$location.path('维护')}}返回 deferred_foo.promise}]}}).when('/r/:type/:bar_id', {templateUrl: 'views/bar.html',控制器:'BarsCtrl',解决: {bar: ['$q', '$route', '$timeout', '$location', 'Bars', function($q, $route, $timeout, $location, Bars) {//推迟执行var deferred = $q.defer()Bars.getBar({type: bar_type}, successCb)函数 successCb(result) {如果(结果['状态'] === 200){deferred.resolve(result)}别的 {警报('崩溃崩溃')deferred.reject("有些不对劲")$location.path('foos')}返回 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, 共享服务) {...}

有人可以解释为什么 Bar 工作但 Foo 给了我 Error: Unknown provider: foo_listProvider <- foo_list?我试过用不同的名称替换 foo_list 以防camelCasing 做了一些事情但没有帮助.

解决方案

所以,这个问题与我自己的问题出人意料地相似,我刚刚在 Angular IRC 频道的人们的帮助下发现了这个问题...机会,通过 ng-controller 设置你的控制器?我有:

 

...什么时候应该被删除:

 

... 因为我在路由器的解析中设置了控制器.这就是我正在做的事情,它导致了这个问题.你可以在这里看到更多:

https://stackoverflow.com/a/18305423/1306982

I've two routes with resolve. Goes like this:

.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
                }]
            }
        })

Then I've two controllers working like this:

 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) {...}

Could somebody explain why Bar works but Foo gives me Error: Unknown provider: foo_listProvider <- foo_list? I've tried replacing foo_list with different name in case camelCasing did something but didn't help.

解决方案

So, this question was surprisingly similar to my own which I just figured out with help from the folks over at the Angular IRC channel... are you, by chance, setting up your controller though ng-controller? I had:

    <div ng-controller="myCtrl">

... when it should have been removed:

    <div>

... because I was setting up the controller in the resolve on the router. That's what I was doing and it was causing this very issue. You can see more here:

https://stackoverflow.com/a/18305423/1306982

这篇关于AngularJS,解析和未知的提供者的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆