Um componente é uma diretiva com um modelo e o @Componentdecorador é na verdade um @Directivedecorador estendido com recursos orientados a modelos - fonte .
Cosmin Ababei 13/04
2
Diretiva vs Componente é o novo Serviço vs Fábrica. A confusão também aumenta porque, na verdade, ao exigir outros componentes de uma definição de componente, você os especifica na directivesmatriz ... talvez o comentário de Lida Weng abaixo ajude um pouco a esclarecer que o componente "na verdade é uma diretiva estendida"
Nobita
1
componentes realmente estender directiva, que apenas exigem que você tenha um modelo (HTML) em oposição às directivas .. Então você usaria directiva para modificar elemento html existente e marcas de componente HTML elementos
Marko Niciforovic
Respostas:
546
Um @Component requer uma visualização, enquanto um @Directive não.
Diretivas
Eu comparo uma diretiva @Directive a uma diretiva Angular 1.0 com a opçãorestrict: 'A' (Diretivas não se limitam ao uso de atributos.) Diretivas adicionam comportamento a um elemento DOM existente ou a uma instância de componente existente. Um exemplo de caso de uso de uma diretiva seria registrar um clique em um elemento.
Um componente, em vez de adicionar / modificar comportamento, na verdade cria sua própria exibição (hierarquia de elementos DOM) com o comportamento anexado. Um exemplo de caso de uso para isso pode ser um componente do cartão de contato:
ContactCardé um componente reutilizável da interface do usuário que poderíamos usar em qualquer lugar do aplicativo, mesmo em outros componentes. Eles basicamente compõem os componentes básicos da interface do usuário de nossos aplicativos.
Em suma
Escreva um componente quando desejar criar um conjunto reutilizável de elementos DOM da interface do usuário com comportamento personalizado. Escreva uma diretiva quando desejar escrever um comportamento reutilizável para complementar os elementos DOM existentes.
a anotação @directive possui a propriedade template / templateUrl?
Pardeep jain #
7
Essa resposta ainda é verdadeira? O próprio tutorial angular2 cria um componente sem uma visão
Tamas Hegedus
é sem vista, mas templateurl ou modelo são obrigatórios no componente
Luca Trazzi
4
Eu gosto desse tipo de resposta, mas eu realmente aprecio uma atualização quando mudanças cruciais acontecem na estrutura.
Memet Olsen
Isso precisa ser mudado um pouco. A API angular 2 foi alterada. Não existe mais o View decorator.
DaSch 21/09
79
Componentes
Para registrar um componente, usamos @Componenta anotação de metadados.
Component é uma diretiva que usa o DOM de sombra para criar um comportamento visual encapsulado chamado componentes. Os componentes são normalmente usados para criar widgets da interface do usuário.
O componente é usado para dividir o aplicativo em componentes menores.
Apenas um componente pode estar presente por elemento DOM.
@View decorador ou modelo templateurl são obrigatórios no componente.
Directiva
Para registrar diretivas, usamos @Directiveanotações de metadados.
A diretiva é usada para adicionar comportamento a um elemento DOM existente.
A diretiva é usada para projetar componentes reutilizáveis.
Muitas diretivas podem ser usadas por elemento DOM.
Não tenho certeza por que você recebeu muitos votos negativos. Parece que @Component é uma diretiva com um modelo (para gerar visualização) para mim.
Harry Ninh
22
No Angular 2 e acima, "tudo é um componente". Os componentes são a principal maneira de criar e especificar elementos e lógica na página, por meio de elementos e atributos personalizados que adicionam funcionalidade aos nossos componentes existentes.
Somente @Componentpode ser um nó na árvore de detecção de alterações. Isso significa que você não pode definir ChangeDetectionStrategy.OnPushem a @Directive. Apesar deste fato, uma directiva pode ter @Inpute @Outputpropriedades e você pode injetar e manipular do componente do host ChangeDetectorRefa partir dele. Portanto, use Componentes quando precisar de um controle granular sobre sua árvore de detecção de alterações.
Em um contexto de programação, as diretivas fornecem orientações ao compilador para alterar como ele processaria a entrada, ou seja, alterar algum comportamento.
"As diretivas permitem anexar o comportamento a elementos no DOM."
diretrizes são divididas em três categorias:
Atributo
Estrutural
Componente
Sim, no Angular 2, os componentes são um tipo de diretiva. De acordo com o Doc,
“Componentes angulares são um subconjunto de diretivas. Diferentemente das diretivas, os componentes sempre têm um modelo e apenas um componente pode ser instanciado por um elemento em um modelo. ”
Os componentes Angular 2 são uma implementação do conceito de componente da Web . O Web Components consiste em várias tecnologias separadas. Você pode pensar nos Web Components como widgets reutilizáveis da interface com o usuário criados usando a tecnologia da Web aberta.
Assim, em diretrizes resumidas O mecanismo pelo qual atribuímos comportamento aos elementos no DOM, consistindo nos tipos Estrutural, Atributo e Componente.
Componentes são o tipo específico de diretiva que nos permite utilizar a funcionalidade de componentes da Web AKA reutilizável - elementos reutilizáveis, encapsulados e disponíveis em toda a nossa aplicação.
Se você consultar os documentos angulares oficiais
https://angular.io/guide/attribute-directives
Existem três tipos de diretivas no Angular:
Componentes - diretivas com um modelo.
Diretivas estruturais - altere o layout do DOM adicionando e removendo elementos DOM. por exemplo, * ngIf
Diretivas de atributos - altere a aparência ou o comportamento de um elemento, componente ou outra diretiva. por exemplo, [ngClass].
À medida que o aplicativo cresce, encontramos dificuldades em manter todos esses códigos. Para fins de reutilização, separamos nossa lógica em componentes inteligentes e componentes burros e usamos diretivas (estruturais ou de atributo) para fazer alterações no DOM.
Os componentes são o componente básico da interface do usuário de um aplicativo Angular. Um aplicativo Angular contém uma árvore de componentes Angular. Nossa aplicação no Angular é construída em uma árvore de componentes . Cada componente deve ter o seu modelo, estilo, ciclo de vida, seletor, etc. Assim, cada componente tem sua estrutura Você pode tratá-los como um pequeno aplicativo da Web independente distante com modelo próprio e lógica e uma possibilidade de se comunicar e ser utilizado em conjunto com outros componentes.
Exemplo de arquivo .ts para Component:
import { Component } from '@angular/core';
@Component({
// component attributes
selector: 'app-training',
templateUrl: './app-training.component.html',
styleUrls: ['./app-training.component.less']
})
export class AppTrainingComponent {
title = 'my-app-training';
}
e sua visualização do modelo ./app.component.html:
Hello {{title}}
Em seguida, você pode renderizar o modelo AppTrainingComponent com sua lógica em outros componentes (após adicioná-lo ao módulo)
A diretiva altera a aparência ou o comportamento de um elemento DOM existente. Por exemplo [ngStyle] é uma diretiva. As diretivas podem estender os componentes (podem ser usados dentro delas), mas elas não criam um aplicativo inteiro . Digamos que eles apenas suportem componentes. Eles não têm seu próprio modelo (mas é claro, você pode manipular o modelo com eles).
@Component
decorador é na verdade um@Directive
decorador estendido com recursos orientados a modelos - fonte .directives
matriz ... talvez o comentário de Lida Weng abaixo ajude um pouco a esclarecer que o componente "na verdade é uma diretiva estendida"Respostas:
Um @Component requer uma visualização, enquanto um @Directive não.
Diretivas
Eu comparo uma diretiva @Directive a uma diretiva Angular 1.0 com a opção(Diretivas não se limitam ao uso de atributos.) Diretivas adicionam comportamento a um elemento DOM existente ou a uma instância de componente existente. Um exemplo de caso de uso de uma diretiva seria registrar um clique em um elemento.restrict: 'A'
Qual seria usado assim:
Componentes
Um componente, em vez de adicionar / modificar comportamento, na verdade cria sua própria exibição (hierarquia de elementos DOM) com o comportamento anexado. Um exemplo de caso de uso para isso pode ser um componente do cartão de contato:
Qual seria usado assim:
ContactCard
é um componente reutilizável da interface do usuário que poderíamos usar em qualquer lugar do aplicativo, mesmo em outros componentes. Eles basicamente compõem os componentes básicos da interface do usuário de nossos aplicativos.Em suma
Escreva um componente quando desejar criar um conjunto reutilizável de elementos DOM da interface do usuário com comportamento personalizado. Escreva uma diretiva quando desejar escrever um comportamento reutilizável para complementar os elementos DOM existentes.
Fontes:
fonte
Componentes
@Component
a anotação de metadados.@View
decorador ou modelo templateurl são obrigatórios no componente.Directiva
@Directive
anotações de metadados.Fontes:
http://www.codeandyou.com/2016/01/difference-between-component-and-directive-in-Angular2.html
fonte
Um componente é uma diretiva com um modelo e o
@Component
decorador é na verdade um@Directive
decorador estendido com recursos orientados a modelos.fonte
http://learnangular2.com/components/
Mas quais diretivas fazem então no Angular2 +?
https://angular.io/docs/ts/latest/guide/attribute-directives.html
Portanto, o que está acontecendo no Angular2 e acima é que Diretivas são atributos que adicionam funcionalidades a elementos e componentes .
Veja a amostra abaixo do Angular.io:
Então, o que ele faz, estende os componentes e elementos HTML com a adição de fundo amarelo e você pode usá-lo como abaixo:
Mas os componentes criarão elementos completos com todas as funcionalidades, como abaixo:
e você pode usá-lo como abaixo:
Quando usamos a tag no HTML, esse componente será criado e o construtor será chamado e renderizado.
fonte
Detecção de alterações
Somente
@Component
pode ser um nó na árvore de detecção de alterações. Isso significa que você não pode definirChangeDetectionStrategy.OnPush
em a@Directive
. Apesar deste fato, uma directiva pode ter@Input
e@Output
propriedades e você pode injetar e manipular do componente do hostChangeDetectorRef
a partir dele. Portanto, use Componentes quando precisar de um controle granular sobre sua árvore de detecção de alterações.fonte
Em um contexto de programação, as diretivas fornecem orientações ao compilador para alterar como ele processaria a entrada, ou seja, alterar algum comportamento.
diretrizes são divididas em três categorias:
Sim, no Angular 2, os componentes são um tipo de diretiva. De acordo com o Doc,
Os componentes Angular 2 são uma implementação do conceito de componente da Web . O Web Components consiste em várias tecnologias separadas. Você pode pensar nos Web Components como widgets reutilizáveis da interface com o usuário criados usando a tecnologia da Web aberta.
fonte
Se você consultar os documentos angulares oficiais
Existem três tipos de diretivas no Angular:
À medida que o aplicativo cresce, encontramos dificuldades em manter todos esses códigos. Para fins de reutilização, separamos nossa lógica em componentes inteligentes e componentes burros e usamos diretivas (estruturais ou de atributo) para fazer alterações no DOM.
fonte
Componentes
Os componentes são o componente básico da interface do usuário de um aplicativo Angular. Um aplicativo Angular contém uma árvore de componentes Angular. Nossa aplicação no Angular é construída em uma árvore de componentes . Cada componente deve ter o seu modelo, estilo, ciclo de vida, seletor, etc. Assim, cada componente tem sua estrutura Você pode tratá-los como um pequeno aplicativo da Web independente distante com modelo próprio e lógica e uma possibilidade de se comunicar e ser utilizado em conjunto com outros componentes.
Exemplo de arquivo .ts para Component:
e sua visualização do modelo ./app.component.html:
Em seguida, você pode renderizar o modelo AppTrainingComponent com sua lógica em outros componentes (após adicioná-lo ao módulo)
e o resultado será
como AppTrainingComponent foi processado aqui
Veja mais sobre componentes
Diretivas
A diretiva altera a aparência ou o comportamento de um elemento DOM existente. Por exemplo [ngStyle] é uma diretiva. As diretivas podem estender os componentes (podem ser usados dentro delas), mas elas não criam um aplicativo inteiro . Digamos que eles apenas suportem componentes. Eles não têm seu próprio modelo (mas é claro, você pode manipular o modelo com eles).
Diretiva de exemplo:
E seu uso:
Veja mais sobre diretrizes
fonte