Я работаю над небольшим приложением в AngularJS. Мой проект содержит файл Body.html, которые содержат 3 вида: SideMenu, Заголовок и Содержимое, каждый с каждым собственным контроллером и MainController как есть родитель - контроллер в Body.html.
Может ли контроллер заголовка изменить свойство в боковом меню - статус открытия/закрытия бокового меню. И может ли контроллер бокового меню изменять свойство в заголовке - текст заголовка.
Я могу использовать главный контроллер, поскольку как контроллер заголовка, так и контроллер бокового меню могут ссылаться на главный контроллер. Но данные не будут состоять. Обновление данных с 1-го контроллера не влияет на данные во втором контроллере (без использования $ watch).
Могут ли как контроллер бокового меню, так и контроллер заголовка (диспетчер сиблинга) взаимодействовать друг с другом? без помощи родителя?Can Siblings Controllers взаимодействуют друг с другом без помощи родителя - AngularJS
Body.html
<div>
<!-- Header placeholder -->
<div ui-view="header"></div>
<!-- SideMenu placeholder -->
<div ui-view="sideMenu"></div>
<!-- Content placeholder -->
<div ui-view></div>
</div>
header.html
<div>
{{ headerCtrl.text }}
</div>
<div ng-click="headerCtrl.openSideMenu()">
--Open--
</div>
HeaderController.js
// sideMenuCtrl = ???
headerCtrl.text = "Title";
headerCtrl.openSideMenu = function()
{
sideMenuCtrl.isSideMenuOpen = true;
};
SideMenu.html
<div ng-class={ 'side-menu-open': sideMenuCtrl.isSideMenuOpen }>
<div ng-repeat="menuItem in sideMenuCtrl.sideMenuItems"
ng-click="sideMenuCtrl.selectMenuItem(menuItem)">
{{ menuItem.text }}
</div>
</div>
SideMenuController.js
// headerCtrl = ???
sideMenuCtrl.selectMenuItem = function(menuItem)
{
headerCtrl.text = menuItem.text;
}
Вы можете использовать услугу или фабрику для обмена данными и логики между контроллерами. См. Угловую документацию и руководство по [услуге] (https://docs.angularjs.org/guide/services) и [заводская установка] (https://docs.angularjs.org/guide/providers) – zoom
redux/flux является хорошим шаблон для потока данных сверху вниз для всех братьев и потомков.или, в более общем плане, EventEmitters или DOM-события для существующего родителя (события пузырятся). глобальная переменная (ужас) может работать с упрощенными чудесами в небольших приложениях. – dandavis
A может использовать сервисы/фабрики для обмена данными между контроллерами. Но у меня была бы такая же проблема, как использование родительской области - данные не состоят. Мне нужно будет использовать $ watch и слушать изменение данных в каждом контроллере. Могу ли я сделать это без $ watch? –