#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 изменилась?