возможно ли использование нескольких контроллеров на одном контроллере в angularjs?

#javascript #angularjs #controller #controllers

#javascript #angularjs #контроллер #контроллеры

Вопрос:

итак, допустим, у меня есть несколько контроллеров

 angular.module('myApp.controllers', []).
              controller('MyCtrl1', ['$scope', function($scope) {
                  //define $scope.controller1 here
                  $scope.controller1 = "controller1";
              }).
              controller('MyCtrl1', ['$scope', function($scope) {
                  //define $scope.controller2 here
                  $scope.controller2 = "controller2";
              }).
              controller('MyCtrl3', ['$scope', function($scope) {
                  //I want to get the property of $scope.controller1 and    
                  //$scope.controller2 here
              });
 

как вы можете видеть выше, например, я хочу получить доступ к свойству $scope из controller1 и controller2 из 3…

вопрос в том, способен ли angularjs вызывать несколько контроллеров на одном контроллере?

Ответ №1:

В AngularJS области наследуются в зависимости от их положения в DOM. Итак, если ваш html выглядел как:

 <div ng-controller="my-ctrl1">
    <div ng-controller="my-ctrl2">
        <div ng-controller="my-ctrl3"></div>
    </div>
</div>
 

Тогда $scope.controller1 будет доступен из MyCtrl1, MyCtrl2 и MyCtrl3, но $scope.controller2 будет доступен только из MyCtrl2 и MyCtrl3.

Если вы хотите обмениваться данными между контроллерами, вам следует сохранить эти данные в сервисе и внедрить сервис в контроллеры:

 angular.module('myApp.controllers', []).
    factory('MyData', function(){
        var MyData= {};
        return MyData;
    }).
    controller('MyCtrl1', ['$scope' 'MyData', function($scope, MyData) {
        MyData.controller1 = "controller1";
    }).
    controller('MyCtrl2', ['$scope', 'MyData', function($scope, MyData) {
        MyData.controller2 = "controller2";
    }).
    controller('MyCtrl3', ['$scope', 'MyData', function($scope, MyData) {
        // Now you can access MyData.controller1 and MyData.controller2
    });
 

Комментарии:

1. да, на самом деле я мог бы сделать это с помощью html, но я хочу спросить, возможно ли это, если я использую его на стороне javascript. ну, например, возможно ли внедрить контроллер с помощью внедрения зависимостей? что-то вроде этого 🙂 @dustyrockpyle

2. Ах, я понимаю, о чем вы спрашиваете немного лучше. Я обновлю свой ответ.

3. Это не очень хорошая идея для структуры html, что мы будем делать, если структура div изменилась?