/ / controller angularjs aninhado: como um controlador pode se comunicar com outro controlador? - angularjs, angularjs-scope

controlador angularjs aninhado: como um controlador pode se comunicar com outro controlador? - angularjs, angularjs-scope

Aqui está a minha visão 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>

Meu objetivo é escrever o controlador chatInputController, então quando o usuário digita no chatInputTxt, os textos no chatTextController são atualizados, dizendo diferentemente:

Como o chatInputController pode acessar / se comunicar com o chatTextController?

Saudações

Respostas:

0 para resposta № 1

Você não deve usar $emit ou $broadcast sempre que possível, quanto mais serviços exigirem, mais você encontrará uma confusão de solução de problemas.

Os controladores aninhados no Angular.js recebem automaticamente uma cópia do escopo dos pais. Para responder à sua pergunta, é tudo automático.

<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 para resposta № 2

Você tem poucas opções:

  1. Você pode usar $broadcast e $on se comunicar com os controladores de irmãos
  2. Você tem um controlador pai, você pode definir objetosno controlador a ser compartilhado com os controladores filhos (apenas certifique-se de entender a herança do escopo Angular $ ou as coisas vão ficar confusas, rapidamente). - https://github.com/angular/angular.js/wiki/Understanding-Scopes
  3. Use um serviço compartilhado para acessar de cada controlador

-1 para resposta № 3

Você pode usar $ emit ou $ broadcast para gerar um evento e passar alguns dados.

  • $ broadcast - envia o evento para todos os escopos filho.

  • $ emit - envia o evento para cima através da hierarquia do escopo.

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

    Então você pode transmitir a partir de $ rootScope. Em seguida, no outro uso do controlador

    $ scope. $ on ("eventName", função (param1, param2) { })

    para pegar o evento.

Você também pode usar um serviço e configurar um relógioo serviço em cada um dos seus controladores. Ou você pode ter um controlador pai em vez de poluir o rootScope e fazer uma transmissão a partir do controlador pai.

Se a comunicação for apenas de uma forma, do escopo filho ao escopo pai, a emissão funcionará a partir do controlador filho.