/ / вкладений контролер angularjs: як один контролер може спілкуватися з іншим контролером? - angularjs, angularjs-scope

Вставлений регулятор angularjs: як один контролер може взаємодіяти з іншим контролером? - angularjs, angularjs-scope

Ось мій HTML-перегляд:

<div id="chatContainer">
<div id="users" ng-controller="usersController">
<div ng-repeat="user in users" class="userItem">{{user.username}}</div>
</div>

<div id="chatText" ng-controller="chatTextController">
<div ng-repeat="text in texts" class="text">{{text.text}}</div>
</div>

<div id="chatInput" ng-controller="chatInputController">
<input type="text" placeholder="Enter chat text here" id="chatInputTxt" ng-model="chatInputTxt">
</div>
</div>

Моя мета полягає в написанні контролера chatInputController, тому, коли користувач вводить в chatInputTxt, тексти в chatTextController оновлюються, кажучи по-іншому:

Як chatInputController доступ / спілкуватися з chatTextController?

З повагою

Відповіді:

0 для відповіді № 1

Ви не повинні користуватися $emit або $broadcast коли це можливо, як більше послуг, які вимагають цього, тим більше усунення неполадок, які ви можете отримати.

Вкладені контролери в Angular.js автоматично отримують копію своїх батьків. це все автоматично.

<div ng-controller="controller1">
{{mySharedValue}} // bar
<div ng-controller="controller2">
{{mySharedValue }} // also bar
</div>
</div>

JS ...

function controller1($scope) { $scope.mySharedValue = foo; $scope.notify = function() {
console.log("I"m notified!")
}; }
function controller2($scope) { $scope.mySharedValue = bar; $scope.notify(); // logs "i"m notified!" }

-1 для відповіді № 2

У вас є кілька варіантів:

  1. Ви можете використовувати $broadcast і $on спілкуватися з контролерами-братами
  2. У вас є батьківський контролер, ви можете встановити об'єктина цьому контролері, який буде спільно використовуватися з дочірніми контролерами (просто переконайтеся, що ви розумієте, що наслідок Angular $ scope або речі заплутані, швидко). - https://github.com/angular/angular.js/wiki/Understanding-Scopes
  3. Використовуйте спільний сервіс для доступу до кожного контролера

-1 для відповіді № 3

Ви можете використовувати $ emit або $ broadcast для генерування події та передачі деяких даних.

  • $ broadcast - відправити подію до всіх дочірніх областей.

  • $ emit - відправити подію вгору через ієрархію області.

    $ scope. $ broadcast ("eventName", param1, param2);

    Таким чином, ви могли б транслювати з $ rootScope. Далі в іншому контролері використовують

    $ scope. $ on ("eventName", функція (param1, param2) { })

    піймати подію.

Ви також можете скористатися послугою та налаштувати годинникпослугу в кожному з ваших контролерів. Або ви можете мати батьківський контролер замість того, щоб забруднювати rootScope і робити трансляцію з батьківського контролера.

Якщо зв'язок здійснюється тільки одним способом, то від дочірньої області до батьківської області тоді випромінювання буде працювати від дочірнього контролера.