52

私は解決する2つのルートを持っています。このようになります:

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

次に、2つのコントローラーが次のように動作します。

 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は私にくれError: Unknown provider: foo_listProvider <- foo_listますか?foo_listキャメルケースが何かをしたが役に立たなかった場合に備えて、別の名前に置き換えてみました。

4

3 に答える 3

180

ですから、この質問は、Angular IRC チャネルの人々の助けを借りて理解したばかりの私自身の質問と驚くほど似ていました... たまたま、コントローラーをセットアップしていますng-controllerか? 私が持っていた:

    <div ng-controller="myCtrl">

...削除する必要がある場合:

    <div>

...ルーターのリゾルブにコントローラーを設定していたからです。それが私がしていたことであり、それがまさにこの問題を引き起こしていました。ここでもっと見ることができます:

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

于 2013-08-19T01:55:14.770 に答える
2

foo_list <-これのjsファイルは、htmlページのスクリプトタグにロードされていますか? factory/service/controller を含めるのを忘れていて、実際に index/app html ページの script タグに含めるのを忘れている場合 (または shim が必要な場合) が考えられます。

さて、あなたのコメントを見て、ここで答えを拡張するのは、ここで行う方が簡単だからです。

コントローラーを宣言するコードは次のように読む必要があります

App.controller('FoosCtrl', 
   ['$scope', '$location', 'Foos', /* comment out foo_list here*/ 
    function($scope, $location, Foos, foo_list /* this remains */) {
  ...
}

ルートが変更されると、「解決」で言及したことが ui-router によって解決されます。しかし、FoosCtrl を宣言している場所では、解決するためのプロバイダーが実際にはありません。

これを試してみてください。先週、このような同様のケースがありました。

于 2013-07-15T00:43:19.563 に答える
0

念のために言っておきますが、応答関数を$stateProvider.state()まだ設定していないときに、解決変数を依存関係としてコントローラーに追加することによって引き起こされた同様の問題が発生しました。

解決機能を追加すると、不足している依存関係が修正されました
(理由はまだよくわかりません-誰かがコメントで彼の知識を共有できればうれしいです)

于 2016-03-09T07:22:10.493 に答える