один контроллер загружает представления с других контроллеров, как и почему?

0

У меня есть следующий div в моем index.html, контроллером которого является MainCtrl. Это div, используемый для загрузки представлений с разных контроллеров.

<div ng-controller="MainCtrl">
          <div ng-view></div>
      </div>

И это мои контроллеры:

.config(['$routeProvider', function($routeProvider) {

    $routeProvider.
        when('/main', {
            templateUrl: 'views/main.html',
            controller: 'MainCtrl'
        }).
        when('/about', {
            templateUrl: 'views/about.html',
            controller: 'MainCtrl'
        }).
        when('/services', {
            templateUrl: 'views/services.html',
            controller: 'ServicesCtrl'
        }).
        when('/contact', {
            templateUrl: 'views/contact.html',
            controller: 'ContactCtrl'
        }).
        otherwise({redirectTo: '/main'})

}])

.controller('MainCtrl', ['$scope', '$http', function($scope, $http) {
    $http.get('data/services.json').then(function(response){
        $scope.services = response.data;
    });
}])

.controller('ServicesCtrl', ['$scope', '$http', function($scope, $http) {
    $http.get('data/services.json').then(function(response){
        $scope.services = response.data;
    });
}])

.controller('ContactCtrl', ['$scope', '$http', function($scope, $http) {
    $http.get('data/locations.json').then(function(response){
        $scope.locations = response.data;
    });
}]);

Все работает отлично, но я не понимаю, как все виды из разных контроллеров автоматически загружаются внутри <div ng-controller="MainCtrl">?

Так, например, если я иду в mysite/services, он загружает services.html, хотя его контроллер - ServiceCtrl.

Мне кажется логичным, что он должен загружать только представление из MainCtrl, которое является main.html и about.html, но все же загружает их независимо от имен контроллеров, как получилось?

  • 0
    Ваш вопрос не имеет смысла. шаблон и контроллер являются двумя отдельными объектами. маршрут заменяет <div ng-view> HTML-кодом из templateUrl и контроллером из строки controller для каждого маршрута. в этом отношении объявление ng-controller является избыточным и может привести к неожиданным ошибкам.
  • 0
    Как говорит ваша маршрутизация, когда сервисы используют сервисы HTML и контроллер. Снимите атрибут ng-controller с вашего div и позвольте маршрутизации загружать HTML и соответствующий контроллер на основе вашего routeProvider.
Теги:

1 ответ

0

Не должно быть ng-controller="MainCtrl" потому что контроллеры для каждого маршрута определены в вашей конфигурации маршрутизации.

Если у вас есть это в вашей странице, то когда about или main нагрузки вы фактически инициализировать 2 экземпляра MainCtrl. Один экземпляр будет вызываться маршрутизатором, а другой - ng-controller и это может быть проблематично.

При этом вы можете иметь внешний контроллер, но он не будет таким же, как те, которые используются в маршрутах

  • 0
    Я занимаюсь некоторыми уроками, и это первый проект, я новичок в angular и просто хотел узнать, как соотносятся представления разных контроллеров. Если я изменю контроллер div, например, на «ContactCtrl», он будет соответствующим образом отображать представления из «MainCtrl» при вызове home или about links.
  • 0
    это делает роутер. Он анализирует URL-адрес и определяет, какой шаблон и контроллер загрузить в ng-view
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню