AngularJS - 激活所有带路由的控制器

AngularJS - activating all controllers with routing

我正在使用 AngularJS 并使用 ngRoute 进行路由。 我想知道当 Angular 路由到 "otherwise" 部分并激活所有控制器时,这是否是 Angular 的正常行为?

var angularApp = angular.module('AngularApp', ['ngRoute']);
    angularApp.config(['$routeProvider',
    function ($routeProvider) {
        $routeProvider
            .when('/ExpenseOverview', {
                controller: 'ExpenseOverviewController',
                templateUrl: 'Angular/Views/ExpenseOverview.vbhtml'
            })
            .when('/AddExpense',
            {
                controller: 'AddExpenseController',
                templateUrl: 'Angular/Views/AddExpense.vbhtml'
            })
        .otherwise({ redirectTo: '/ExpenseOverview' });
    }]);

我已经在每个控制器的最顶部放置了一个警报,甚至是我的工厂。在启动时,会显示所有警报。它不是一开始去 "ExpenseOverview",而是检查我的两个控制器,而不仅仅是绑定到“/ExpenseOverview”的控制器。

这可能是什么原因?

编辑: 知道 Angular 在启动时访问所有控制器是正常的,但主要问题尚未解决然而。 Whosebug 上的 another thread 对此进行了解释。我认为这与它有关,因为我不知道 Angular 这样做是正常的行为。

我可以说这个帖子已经关闭了,因为我的问题现在有了答案。

Angular 不会在启动时访问每个控制器,但是 ngRoute 会。在 $routeProvider 中具有相应路由条目的控制器中的任何初始化代码将在初始化时 运行。

这里有一个例子:http://plnkr.co/edit/WsvbKhcR74yoX80bskdb?p=preview

<!DOCTYPE html>
<html ng-app="app">

  <head>
    <script data-require="angular.js@*" data-semver="1.3.15" src="https://code.angularjs.org/1.3.15/angular.js"></script>
    <script data-require="ng-route@*" data-semver="1.2.0" src="http://code.angularjs.org/1.2.0-rc.3/angular-route.js"></script>
  </head>

  <body ng-controller="main">
    <h1>Hello {{test}}!</h1>
    <div ng-view="">Hello?</div>
    <script>
      var app = angular.module('app', ['ngRoute']);
      app.config(function ($routeProvider) {
          $routeProvider
              .when('/route1', {
                  controller: 'con1',
                  templateUrl: 'view1'
              })
              .when('/route2',
              {
                  controller: 'con2',
                  templateUrl: 'view2'
              })
          .otherwise({ redirectTo: '/route1' });
      });

      app.controller('main', function($scope){
        alert('1');
        $scope.test = 'Yo.';
      });

      app.controller('con1', function($scope){
        alert('2');
        $scope.value = 'value1';
      });

      app.controller('con2', function($scope){
        $scope.value = 'value2'
      });

    </script>
    <script type="text/ng-template" id="view1">
      View 1 {{value}}
    </script>
    <script type="text/ng-template" id="view2">
      View 2 {{value}}
    </script>
  </body>

</html>