"主要"在这个例子中,控制器访问$ routeParams?

时间:2014-03-31 22:17:42

标签: javascript angularjs model-view-controller

我正在试验$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对象?我可以在点击时看到{{1}的项目负责设置正在改变,但我不明白如何。这使得重现这种行为变得有点困难。

1 个答案:

答案 0 :(得分:3)

它没有被重新实例化,并且它没有“获取”更新的$routeParams对象 - 控制器中的对象是 routeParams对象。它是其他控制器中的相同的对象,而不是它的“副本”。

因此,当$ routeParams对象发生更改时,另一个控制器已经有了更改。