2013-02-26 33 views
2

我解决了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

如果我改变HomeCtrlData到AboutCtrlData在HomeCtrl一切正常,似乎分配的唯一解决方案是AboutCtrl.resolve

任何想法?

+0

如果内嵌什么HomeCtrl.resolve设置为 - 即'决心:{HomeCtrlData:...}'它的工作原理,但我不知道为什么。 (另外,我认为代码中出现的第一个'AboutCtrlResolver'应该是'HomeCtrlResolver'。) – 2013-02-26 04:40:01

回答

3

这里的问题是,app.controller()不返回控制器,它返回您的应用程序模块。所以你两次分配app.resolve,这就是为什么它不适用于其中之一。

我建议你内联函数决心像这样来代替:

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; 
      } 
     } 
    }); 
}); 
+1

谢谢你,我解决了! http://jsfiddle.net/pvivera/RhAHy/2/ – 2013-02-26 11:15:28