2

各コントローラーに1つずつ、合計2つの解決策に問題があります。

http://jsfiddle.net/pvivera/RhAHy/

var app = angular.module('testApp', [], function($routeProvider){
    $routeProvider.when('/', {
        template: 'Home {{model}}',
        controller: 'HomeCtrl',
        resolve: HomeCtrl.resolve
    })
    .when('/About', {
        template: 'About {{model}}',
        controller: 'AboutCtrl',
        resolve: AboutCtrl.resolve
    });
});

var HomeCtrl = app.controller('HomeCtrl', function($scope, HomeCtrlData){
    $scope.model = HomeCtrlData;
});

HomeCtrl.resolve = {
    HomeCtrlData: function($q, $timeout){
        var deferred = $q.defer();
        $timeout(function(){
            return deferred.resolve('AboutCtrlResolver');
        }, 2000);
        return deferred.promise;
    }
};

var AboutCtrl = app.controller('AboutCtrl', function($scope, AboutCtrlData){
    $scope.model = AboutCtrlData;
});

AboutCtrl.resolve = {
    AboutCtrlData: function($q, $timeout){
        var deferred = $q.defer();
        $timeout(function(){
            return deferred.resolve('AboutCtrlResolver');
        }, 2000);
        return deferred.promise;
    }
};

jsfiddlerスクリプトで、HomeCtrlがHomeCtrlDataを解決しようとすると、このエラーが表示されます不明なプロバイダー:HomeCtrlDataProvider <-HomeCtrlData

HomeCtrlでHomeCtrlDataをAboutCtrlDataに変更すると、すべてが機能しますが、割り当てられる解決策はAboutCtrl.resolveだけのようです。

何か案が?

4

1 に答える 1

3

ここでの問題はapp.controller()、コントローラーが返されず、アプリケーション モジュールが返されることです。したがって、2回割り当てapp.resolveているため、そのうちの1つでは機能しません。

代わりに、次のように解決関数をインライン化することをお勧めします。

var app = angular.module('testApp', [], function($routeProvider){
    $routeProvider.when('/', {
        template: 'Home {{model}}',
        controller: 'HomeCtrl',
        resolve: {
            HomeCtrlData: function($q, $timeout) {
                var deferred = $q.defer();
                $timeout(function(){
                    return deferred.resolve('HomeCtrlData');
                }, 2000);
                return deferred.promise;
            }
        }
    })
    .when('/About', {
        template: 'About {{model}}',
        controller: 'AboutCtrl',
        resolve: {
            AboutCtrlData: function($q, $timeout) {
                var deferred = $q.defer();
                $timeout(function(){
                    return deferred.resolve('AboutCtrlData');
                }, 2000);
                return deferred.promise;
            }
        }
    });
});
于 2013-02-26T08:33:16.843 に答える