Tengo este código $rootScope.$on('abc',function(event, next, current){ }); en un tutorial.

Mi pregunta es ¿qué es .$on()? Si es una función, entonces ¿por qué es precedido por $?

  • Se puede decir que es una función porque usted está llamando con (). El $ es básicamente el sin sentido. El marco Angular que sólo ha $ en sus propiedades, como $rootScope hace. Se recuerda que es de Angular, básicamente. Carece de sentido. $.on es sólo una función que se conecta un detector de eventos. Leer la documentación.
  • posibles duplicados de AngularJS y su uso de Dólar Variables
  • Verificación de la API docs, tiene todas las respuestas que necesitas aquí
  • En mi experiencia con AngularJS, que es obviamente limitada, $on funciona casi de la misma manera que el jQuery on función. El $ sólo significa que es una reservados público Angular identificador.
InformationsquelleAutor user720445 | 2015-03-01

1 Comentario

  1. 107

    $on está relacionado con $broadcast y $emit – que es una forma para activar el código de otros lugares.

    La primera cosa sobre $on que usted debe saber es que es un método de $scope

    La segunda cosa que usted debe saber es de $ prefijo se refiere a un Método Angular, $$ prefijos se refiere a angular métodos que se debe evitar el uso de.

    Ahora vamos a entrar en detalle acerca de lo que $on es.

    A continuación es un ejemplo de la plantilla y sus controladores, vamos a explorar cómo $broadcast/$on nos puede ayudar a conseguir 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 es ¿cómo se puede pasar el nombre del segundo controlador cuando un usuario hace clic en registrarse? Usted puede venir para arriba con múltiples soluciones, pero la que vamos a utilizar es el uso de $difusión y $en.

    $difusión vs $emiten

    Que deberíamos utilizar? $emisión de canal hacia abajo a todos los niños a los elementos del dom y $emiten canal la dirección opuesta a la de todos los antepasados de elementos del dom.

    La mejor manera de evitar que decidir entre $emiten o $difusión es el canal de la $rootScope y uso $difusión a todos sus hijos. Lo que hace a nuestro caso, mucho más fácil, ya que nuestros elementos de dom son hermanos.

    La adición de $rootScope y permite a los $difusión

    app.controller('FirstCtrl', function($rootScope, $scope){
        $scope.register = function(){
            $rootScope.$broadcast('BOOM!', $scope.name)
        }
    });

    Nota hemos añadido $rootScope y ahora estamos usando $difusión(broadcastName, argumentos). Para broadcastName, queremos darle un nombre único para que podamos coger ese nombre en nuestro secondCtrl. He elegido BOOM! sólo por diversión. El segundo de los argumentos, los argumentos de’ nos permite pasar valores a los oyentes.

    La recepción de nuestro difusión de

    En nuestro segundo controlador, tenemos que configurar el código para escuchar nuestra emisió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 maneras de lograr resultados similares

    Intentar evitar el uso de este conjunto de métodos, ya que no es ni eficiente ni fáciles de mantener, pero es una manera simple para solucionar los problemas que usted pueda tener.

    Generalmente, usted puede hacer lo mismo mediante el uso de un servicio o por la simplificación de sus controladores. No vamos a discutir esto en detalle, pero he pensado que me gustaría mencionar es la integridad.

    Por último, tenga en cuenta realmente útil difusión a escuchar es ‘$destruir’ de nuevo se puede ver el $ significa que es un método u objeto creado por el proveedor de códigos. De todos modos $destruir es transmitida cuando un controlador se destruye, usted puede querer escuchar esto para saber cuando el controlador se quita.

    • bonito ans! Pero yo no podía entender por qué debemos usar function(events, args) y por qué no function(args) trabajo como somos nt utilizando el caso de los argumentos en la función ??
    • Esta forma Angular, la ha definido. Evento tiene sus usos, acaba de pasar a no ser útiles en el ejemplo que he proporcionado. Desde el parámetro de evento se puede determinar que el alcance estábamos en o preventProgation, etc..
    • Gracias. Así que el $on por defecto tiene acceso a event parámetro?? Si lo hace todos los otros angular incorporado función tiene acceso a la event parámetro??
    • Sí la función de detector de $ha event como primer parámetro. No todos los angular incorporado funciones como esta, desde $en es escuchar a un evento que está siendo disparado, tiene esto.
    • Lo siento, puede ser una pregunta de novato, pero si los dos controladores son asignados a dos puntos de vista diferentes en la aplicación,js bajo .de configuración , en este caso SecondCtrl no tendrá ningún tipo de datos, como el controlador va a ser re-creada, estoy en lo cierto?
    • no funciona :/ :/

Dejar respuesta

Please enter your comment!
Please enter your name here