2015-04-21 2 views
2

Я работаю с AngularJS и использую ngRoute для маршрутизации. Мне было интересно, если это нормальное поведение для Углового, когда оно направляется к части «в противном случае» и активирует все контроллеры?AngularJS - активация всех контроллеров с маршрутизацией

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».

Что может быть причиной этого?

EDIT: Зная, что это нормально для Угловое, чтобы получить доступ ко всем контроллерам при запуске, главная проблема еще не исправлена. Это объясняется в another thread на StackOverflow. Я думал, что это связано с этим, потому что я понятия не имел, что это нормальное поведение для Angular для этого.

Я могу сказать, что эта тема закрыта, потому что теперь у меня есть ответ на мой вопрос.

+1

Нет, это не нормальное поведение для Угловое, чтобы активировать все контроллеры. Покажите нам остальную часть вашего кода (включая шаблоны), чтобы узнать проблему. В противном случае это всего лишь игра с угадыванием ... – frhd

+0

Вы вызывали скрипты 'ExpenseOverviewController' на главном экране? –

+1

Я понятия не имел, что это нормальное поведение для Углового. Основная проблема объясняется в другом потоке, я думал, что это то, что прослушивало весь проект. @frhd ваш ответ выполнил мои требования и поблагодарил вас за это. – Jorrex

ответ

0

Угловой не имеет доступа к каждому контроллеру при запуске, однако ngRoute делает. Любой код инициализации в контроллере, который имеет соответствующую запись маршрута в $ routeProvider, будет запущен при инициализации.

Вот пример этого в игре: http://plnkr.co/edit/WsvbKhcR74yoX80bskdb?p=preview

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

    <head> 
    <script data-require="[email protected]*" data-semver="1.3.15" src="https://code.angularjs.org/1.3.15/angular.js"></script> 
    <script data-require="[email protected]*" 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> 
Смежные вопросы