Una cosa que debes saber es que el prefijo $ se refiere a un Método Angular, los prefijos $$ se refieren a métodos angulares que debes evitar.
A continuación se muestra una plantilla de ejemplo y sus controladores, exploraremos cómo $ broadcast / $ on puede ayudarnos a lograr lo que queremos.
<div ng-controller="FirstCtrl">
<input ng-model="name"/>
<button ng-click="register()">Register </button>
</div>
<div ng-controller="SecondCtrl">
Registered Name: <input ng-model="name"/>
</div>
Los controladores son
app.controller('FirstCtrl', function($scope){
$scope.register = function(){
}
});
app.controller('SecondCtrl', function($scope){
});
Mi pregunta para usted es ¿cómo pasa el nombre al segundo controlador cuando un usuario hace clic en registrarse? Puede encontrar múltiples soluciones, pero la que vamos a usar es usar $ broadcast y $ on.
$ broadcast vs $ emit
¿Cuál deberíamos usar? $ broadcast canalizará a todos los elementos dom de los niños y $ emit canalizará la dirección opuesta a todos los elementos dom ancestrales.
La mejor manera de evitar decidir entre $ emit o $ broadcast es canalizar desde $ rootScope y usar $ broadcast para todos sus hijos. Lo que hace que nuestro caso sea mucho más fácil ya que nuestros elementos dom son hermanos.
Agregar $ rootScope y permite $ broadcast
app.controller('FirstCtrl', function($rootScope, $scope){
$scope.register = function(){
$rootScope.$broadcast('BOOM!', $scope.name)
}
});
Tenga en cuenta que agregamos $ rootScope y ahora estamos usando $ broadcast (broadcastName, argumentos). Para broadcastName, queremos darle un nombre único para que podamos capturar ese nombre en nuestro secondCtrl. ¡He elegido BOOM! solo por diversión. Los segundos argumentos 'argumentos' nos permiten pasar valores a los oyentes.
Recibiendo nuestra transmisión
En nuestro segundo controlador, necesitamos configurar el código para escuchar nuestra transmisión
app.controller('SecondCtrl', function($scope){
$scope.$on('BOOM!', function(events, args){
console.log(args);
$scope.name = args; //now we've registered!
})
});
Es realmente así de simple. Ejemplo en vivo
Otras formas de lograr resultados similares
Intente evitar el uso de este conjunto de métodos, ya que no es ni eficiente ni fácil de mantener, pero es una forma sencilla de solucionar los problemas que pueda tener.
Por lo general, puede hacer lo mismo utilizando un servicio o simplificando sus controladores. No discutiremos esto en detalle, pero pensé en mencionarlo por completo.
Por último, tenga en cuenta que una transmisión realmente útil para escuchar es '$ destroy' nuevamente, puede ver que $ significa que es un método u objeto creado por los códigos de proveedor. De todos modos, $ destroy se transmite cuando se destruye un controlador, es posible que desee escuchar esto para saber cuándo se retira su controlador.