2014-03-31 28 views
1

我正在試驗$routeParams,在AngularJS文檔中跟隨this example。作爲參考,這裏是腳本本身:

angular.module('ngRouteExample', ['ngRoute']) 

    .controller('MainController', function($scope, $route, $routeParams, $location) { 
     $scope.$route = $route; 
     $scope.$location = $location; 
     $scope.$routeParams = $routeParams; 
    }) 

    .controller('BookController', function($scope, $routeParams) { 
     $scope.name = "BookController"; 
     $scope.params = $routeParams; 
    }) 

    .controller('ChapterController', function($scope, $routeParams) { 
     $scope.name = "ChapterController"; 
     $scope.params = $routeParams; 
    }) 

    .config(function($routeProvider, $locationProvider) { 
    $routeProvider 
    .when('/Book/:bookId', { 
     templateUrl: 'book.html', 
     controller: 'BookController', 
     resolve: { 
     // I will cause a 1 second delay 
     delay: function($q, $timeout) { 
      var delay = $q.defer(); 
      $timeout(delay.resolve, 1000); 
      return delay.promise; 
     } 
     } 
    }) 
    .when('/Book/:bookId/ch/:chapterId', { 
     templateUrl: 'chapter.html', 
     controller: 'ChapterController' 
    }); 

    // configure html5 to get links working on jsfiddle 
    $locationProvider.html5Mode(true); 
    }); 

什麼我不明白的是:怎麼做MainController獲得更新的$routeParam對象?我可以看到,當我點擊時,MainController負責設置的項目正在改變,但我不明白如何。這使得重現這種行爲有點困難。

+0

我覺得AngularJS在路由發生變化時創建了MainController的新實例,但我不是100%確定的,所以我不打算把它作爲答案。 – BenCr

+0

這就是我如此難倒 - 它必須得到重新實例化,但我不知道如何。 :-( –

+0

也許所有的控制器都會在路由改變的時候重新實例化,控制器不是很長壽的對象 – BenCr

回答

3

它沒有得到重新實例化,也沒有「獲取」更新的對象 - 控制器中的對象是對象routeParams對象。它是在其他控制器中的相同的對象,而不是它的「副本」。

所以當$ routeParams對象被更改時,其他控制器已經有了更改。

+0

這是我需要的大腦啓動,它是'$ routeParams'的一個參考。 –

相關問題