recargar personalizadas pasar parametros entre directivas comunicacion componentes componente javascript angularjs angularjs-directive angular-directive

javascript - personalizadas - pasar parametros entre componentes angular 4



Componente angular 1.5 frente a la directiva anterior: ¿dónde está una función de enlace? (6)

De acuerdo con la documentación actual de Angular2 (consulte https://github.com/angular/angular/blob/master/modules/angular2/docs/core/02_directives.md ) todavía habrá directivas en Angular2. Básicamente, podrá usar tanto @Directive o @Component, donde:

  • Las directivas son útiles para encapsular el comportamiento.
  • Component es una directiva que utiliza shadow DOM para crear un comportamiento visual encapsulado. Los componentes se usan generalmente para crear widgets de interfaz de usuario o para dividir la aplicación en componentes más pequeños.

Entonces, de acuerdo con esto, si necesita manipulación DOM necesitará usar @Directive, por lo tanto, Angular.directive en Angular 1.x. Los enlaces de eventos se pueden hacer usando las propiedades del host . En cuanto a la manipulación DOM per se, todavía falta documentación (por ejemplo, https://github.com/angular/angular/blob/master/modules/angular2/docs/core/09_compilation.md o https://github.com/angular/angular/blob/master/modules/angular2/docs/core/08_lifecycle.md ) pero puede buscar Lifecycle como se sugiere aquí https://stackoverflow.com/a/32062065 .

Como respuesta breve, con Angular 1.5+, continúe usando angular.directive si tiene acceso DOM, de lo contrario, encapsule en angular.component . También intente reducir lo más posible el uso de $scope para eventos no dom y prefiera RxJS para eso, consulte https://medium.com/front-end-developers/managing-state-in-angular-2-using-rxjs-b849d6bbd5a5#.obgb6dl6n ,

He estado leyendo este bonito article reciente sobre el nuevo ayudante .component() en Angular 1.5, que se supone que ayudará a todos a migrar a Angular 2 eventualmente. Todo se ve bien y simple, pero no pude encontrar ninguna información sobre la manipulación DOM dentro de los componentes.

Sin embargo, hay una propiedad de template , que puede ser una función y aceptar argumentos $element y $attrs . Todavía no me queda claro si ese es el reemplazo de una función de link . No lo parece.


Esto hace que sea más fácil escribir una aplicación de manera similar al uso de componentes web o al estilo de arquitectura de aplicaciones de Angular 2.

Ventajas de los componentes:

una configuración más simple que las directivas simples promueven valores predeterminados sanos y las mejores prácticas optimizadas para la arquitectura basada en componentes que escriben directivas de componentes facilitarán la actualización a Angular 2

Cuándo no usar componentes:

para directivas que dependen de la manipulación del DOM, agregar oyentes de eventos, etc., porque las funciones de compilación y enlace no están disponibles cuando necesita opciones avanzadas de definición de directivas como prioridad, terminal, multielementos cuando desea una directiva activada por un atributo o clase CSS , en lugar de un elemento


Ok, parece que el controlador es el lugar adecuado para él ahora, ya que es el único posible. Tampoco podemos usar una opción de replace en un componente auxiliar.


Puede usar la función $ postLink () que está en el ángulo más nuevo.

https://docs.angularjs.org/guide/component

Similar a la función de post-enlace, este enlace se puede usar para configurar controladores de eventos DOM y hacer una manipulación DOM directa.


Actualización (del 22 de agosto de 2017): $ inject se recomienda para hacer esto en AngularJS. Lea Styleguide: enlace Styleguide y documentos de AngularJS : documentos de AngularJS

Para usar enlaces DOM en componentes en lugar de crear una directiva con función de enlace, puede inyectar ''$ element'' u otro servicio que necesite en su función de controlador, por ejemplo

app.component(''pickerField'', { controller: PickerField, template: ''<span>Your template goes here</span>'' }); PickerField.$inject = [''$element'']; function PickerField(element) { var self = this; self.model = self.node.model; self.open = function() { console.log(''smth happens here''); }; element.bind(''click'', function(e) { console.log(''clicked from component'', e); self.open(); }); }


EDITAR 2/2/16: La documentación 1.5 ahora cubre componentes: https://docs.angularjs.org/guide/component

Algunas reflexiones basadas en algunas lecturas (enlaces a continuación):

  • Los componentes no son reemplazos de directivas. Un componente es un tipo especial de directiva que organiza un controlador con una plantilla.

  • Los componentes no tienen una función de enlace y los controladores aún no están donde manejaría la manipulación DOM.

  • Si necesita manipulación DOM, su componente puede usar otras directivas que incluyen esa manipulación DOM en una función de enlace.

Me tomó un tiempo entender esto, pero una vez que lo hice, tenía sentido: los componentes son directivas, pero no todas las directivas son, o deben ser, componentes.

La pregunta sobre las funciones de enlace es natural, o lo era para mí, cuando pensaba que los componentes estaban reemplazando las directivas. ¿Por qué? Debido a que nos han enseñado a poner la manipulación DOM dentro de la función de enlace de una directiva: "Las directivas que desean modificar el DOM generalmente usan la opción de enlace para registrar oyentes DOM así como actualizar el DOM". https://docs.angularjs.org/guide/directive .

Si está ejecutando esa suposición (los componentes reemplazan las directivas), entonces encontrará que los documentos angulares no responden la pregunta porque, bueno, no es la pregunta correcta una vez que conoce el propósito de un componente. (Los componentes se describen en la documentación de $ compileProvider, no en la https://docs.angularjs.org/guide/directive la https://docs.angularjs.org/guide/directive ).

Lectura de fondo

Lo que digo arriba es realmente una reformulación de lo que ha dicho Todd Motto en lo que probablemente sea la mejor discusión (hasta ahora) sobre componentes y directivas:

https://www.reddit.com/r/angularjs/comments/3taxjq/angular_15_is_set_to_introduce_the_component/

Podría ser útil tener esos comentarios en un artículo más general.

La mayoría de los artículos sobre componentes no mencionan una función de enlace (esto no significa que no sean artículos excelentes):

https://toddmotto.com/exploring-the-angular-1-5-component-method/

https://medium.com/@tomastrajan/component-paradigm-cf32e94ba78b#.vrbo1xso0

https://www.airpair.com/angularjs/posts/component-based-angularjs-directives

O cuando se menciona la función de enlace, está entre paréntesis:

http://teropa.info/blog/2015/10/18/refactoring-angular-apps-to-components.html

Un artículo dice que los componentes "usan controladores en lugar de funciones de enlace". Pero no es una situación de "cambio": los controladores no son sustitutos de las funciones de enlace.