@ Directiva v /s @ Componente en Angular


¿Cuál es la diferencia entre @Component y @Directive en Angular? Ambos parecen hacer la misma tarea y tienen los mismos atributos.

¿Cuáles son los casos de uso y cuándo preferir uno sobre otro?

Author: shammelburg, 2015-09-20

6 answers

Un componente @requiere una vista, mientras que una Directiva @no.

Directivas

Comparo una Directiva @con una directiva Angular 1.0 con la opción restrict: 'A' (Las directivas no están limitadas al uso de atributos.) Las directivas añaden comportamiento a un elemento DOM existente o a una instancia de componente existente. Un ejemplo de caso de uso para una directiva sería registrar un clic en un elemento.

import {Directive} from '@angular/core';

@Directive({
    selector: "[logOnClick]",
    hostListeners: {
        'click': 'onClick()',
    },
})
class LogOnClick {
    constructor() {}
    onClick() { console.log('Element clicked!'); }
}

Que se usaría así:

<button logOnClick>I log when clicked!</button>

Componentes

A componente, en lugar de añadir/modificar el comportamiento, en realidad crea su propia vista (jerarquía de elementos DOM) con el comportamiento adjunto. Un ejemplo de caso de uso para esto podría ser un componente de tarjeta de contacto:

import {Component, View} from '@angular/core';

@Component({
  selector: 'contact-card',
  template: `
    <div>
      <h1>{{name}}</h1>
      <p>{{city}}</p>
    </div>
  `
})
class ContactCard {
  @Input() name: string
  @Input() city: string
  constructor() {}
}

Que se usaría así:

<contact-card [name]="'foo'" [city]="'bar'"></contact-card>

ContactCard es un componente de interfaz de usuario reutilizable que podríamos usar en cualquier lugar de nuestra aplicación, incluso dentro de otros componentes. Estos básicamente constituyen los bloques de construcción de la interfaz de usuario de nuestras aplicaciones.

En resumen

Escribir un componente cuando desea crear un conjunto reutilizable de elementos DOM de la interfaz de usuario con un comportamiento personalizado. Escriba una directiva cuando desee escribir un comportamiento reutilizable para complementar los elementos DOM existentes.

Fuentes:

 390
Author: jaker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-27 19:37:45

Componentes

  1. Para registrar un componente usamos @Component una anotación de meta-datos.
  2. Component es una directiva que usa shadow DOM para crear un comportamiento visual encapsulado llamado components. Los componentes se suelen utilizar para crear widgets de interfaz de usuario.
  3. Componente se utiliza para dividir la aplicación en componentes más pequeños.
  4. Solo un componente puede estar presente por elemento DOM.
  5. @View la plantilla decorator o templateurl son obligatorias en componente.

Directiva

  1. Para registrar directivas usamos @Directive la anotación de meta-datos.
  2. La directiva
  3. se usa para agregar comportamiento a un elemento DOM existente.
  4. La Directiva
  5. se utiliza para diseñar componentes reutilizables.
  6. Se pueden usar muchas directivas por elemento DOM.
  7. La directiva no usa View.

Fuentes:

Http://www.codeandyou.com/2016/01/difference-between-component-and-directive-in-Angular2.html

 58
Author: virender,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-28 20:20:52

Un componente es una directiva-con-una-plantilla y el decorador @Component es en realidad un decorador @Directive extendido con características orientadas a plantillas.

 44
Author: yusuf tezel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-21 22:02:59

En Angular 2 y superior, " todo es un componente."Los componentes son la forma principal en que construimos y especificamos elementos y lógica en la página, a través de elementos personalizados y atributos que agregan funcionalidad a nuestros componentes existentes.

Http://learnangular2.com/components /

Pero ¿qué directivas hacen entonces en Angular2+ ?

Las directivas de atributos adjuntan comportamiento a los elementos.

Hay tres tipos de directivas en Angular:

  1. Componentes-directivas con una plantilla.
  2. Directivas estructurales-cambio el diseño DOM mediante la adición y eliminación de elementos DOM.
  3. Directivas de atributos-cambian la apariencia o el comportamiento de un elemento, componente, u otra directiva.

Https://angular.io/docs/ts/latest/guide/attribute-directives.html

Así que lo que está sucediendo en Angular2 y arriba es Las directivas son atributos que agregan funcionalidades de elementos y componentes.

Mira la siguiente muestra de Angular.io:

import { Directive, ElementRef, Input } from '@angular/core';

@Directive({ selector: '[myHighlight]' })
export class HighlightDirective {
    constructor(el: ElementRef) {
       el.nativeElement.style.backgroundColor = 'yellow';
    }
}

Así que lo que hace, se extiende componentes y elementos HTML con la adición de fondo amarillo y se puede utilizar de la siguiente manera:

<p myHighlight>Highlight me!</p>

Pero los componentes crearán elementos completos con todas las funcionalidades como a continuación:

import { Component } from '@angular/core';

@Component({
  selector: 'my-component',
  template: `
    <div>Hello my name is {{name}}. 
      <button (click)="sayMyName()">Say my name</button>
    </div>
   `
})
export class MyComponent {
  name: string;
  constructor() {
    this.name = 'Alireza'
  }
  sayMyName() {
    console.log('My name is', this.name)
  }
}

Y puede usarlo de la siguiente manera:

<my-component></my-component>

Cuando usamos la etiqueta en el HTML, este componente se creará y el constructor get called and rendered.

 17
Author: Alireza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-16 00:04:45

Detección de cambios

Solo @Component puede ser un nodo en el árbol de detección de cambios. Esto significa que no se puede establecer ChangeDetectionStrategy.OnPush en un @Directive. A pesar de este hecho, una Directiva puede tener propiedades @Input y @Output y puede inyectar y manipular ChangeDetectorRef del componente host desde ella. Por lo tanto, use Componentes cuando necesite un control granular sobre su árbol de detección de cambios.

 4
Author: Evgeniy Malyutin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-30 04:51:16

En un contexto de programación, las directivas proporcionan orientación al compilador para alterar cómo de otra manera procesaría la entrada, es decir, cambiar algún comportamiento.

"Las directivas le permiten adjuntar comportamiento a elementos en el DOM."

Las directivas se dividen en 3 categorías:

  • Atributo
  • Estructural
  • Componente

Sí, en Angular 2, los componentes son un tipo de Directiva. Según el Doc,

" Angular los componentes son un subconjunto de directivas. A diferencia de las directivas, los componentes siempre tienen una plantilla y solo se puede crear una instancia de un componente por elemento en una plantilla."

Los componentes de Angular 2 son una implementación del concepto de Componente Web . Web Components consta de varias tecnologías separadas. Puede pensar en los componentes Web como widgets de interfaz de usuario reutilizables que se crean utilizando tecnología Web abierta.

  • Así que en resumen las directivas Del mecanismo por que adjuntamos comportamiento a los elementos en el DOM, que consiste en Estructural, Tipos de atributos y componentes.
  • Los componentes son el tipo específico de directiva que nos permite utilizar funcionalidad del componente web TAMBIÉN conocida como reusabilidad - elementos encapsulados y reutilizables disponibles en toda nuestra aplicación.
 1
Author: Sachila Ranawaka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-03 12:49:41