@Dyrektywy v/S @ komponent w kątowej
Jaka jest różnica między @Component
a @Directive
w kątowym?
Oba zdają się wykonywać to samo zadanie i mają te same atrybuty.
Jakie są przypadki użycia i kiedy preferować jeden nad drugim?
6 answers
Komponent @wymaga widoku, podczas gdy dyrektywa @nie.
Dyrektywy
porównuję dyrektywę @do dyrektywy Angular 1.0 z opcją (dyrektywy nie ograniczają się do użycia atrybutów.) Dyrektywy dodają zachowanie do istniejącego elementu DOM lub istniejącej instancji komponentu. Jednym z przykładów użycia dyrektywy byłoby zalogowanie kliknięcia na elemencie.restrict: 'A'
import {Directive} from '@angular/core';
@Directive({
selector: "[logOnClick]",
hostListeners: {
'click': 'onClick()',
},
})
class LogOnClick {
constructor() {}
onClick() { console.log('Element clicked!'); }
}
Które byłyby użyte w ten sposób:
<button logOnClick>I log when clicked!</button>
Komponenty
A komponent, zamiast dodawać/modyfikować zachowanie, tworzy własny widok (hierarchię elementów DOM) z dołączonym zachowaniem. Przykładowym przypadkiem użycia może być komponent karty kontaktowej:
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() {}
}
Które byłyby użyte w ten sposób:
<contact-card [name]="'foo'" [city]="'bar'"></contact-card>
ContactCard
jest elementem interfejsu wielokrotnego użytku, którego możemy użyć w dowolnym miejscu naszej aplikacji, nawet w innych komponentach. Składają się one zasadniczo na elementy składowe interfejsu użytkownika naszych aplikacji.
W podsumowaniu
Napisz komponent, gdy chcesz utworzyć wielokrotnego użytku zestaw elementów DOM interfejsu użytkownika z niestandardowym zachowaniem. Napisz dyrektywę, gdy chcesz napisać zachowanie wielokrotnego użytku w celu uzupełnienia istniejących elementów DOM.
Źródła:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-27 19:37:45
Komponenty
- do rejestracji komponentu używamy adnotacji metadanych
@Component
. - komponent jest dyrektywą, która używa Shadow DOM do tworzenia zamkniętego zachowania wizualnego zwanego komponentami. Komponenty są zwykle używane do tworzenia widżetów interfejsu użytkownika.
- komponent służy do podziału aplikacji na mniejsze komponenty.
- tylko jeden komponent może być obecny na elemencie DOM.
-
@View
dekorator lub szablon są obowiązkowe w komponent.
Dyrektywa
- do rejestracji dyrektyw używamy adnotacji metadanych
@Directive
. - dyrektywa jest używana do dodania zachowania do istniejącego elementu DOM.
- Dyrektywa służy do projektowania elementów wielokrotnego użytku.
- można użyć wielu dyrektyw dla każdego elementu DOM.
- dyrektywa nie używa widoku.
Źródła:
Http://www.codeandyou.com/2016/01/difference-between-component-and-directive-in-Angular2.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-28 20:20:52
Komponent jest dyrektywą-z-szablonem, a @Component
dekoratorem jest w rzeczywistości dekoratorem @Directive
rozszerzonym o funkcje zorientowane na szablon.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-21 22:02:59
W Angular 2 i wyżej, " wszystko jest składnikiem."Komponenty są głównym sposobem budowania i określania elementów i logiki na stronie, poprzez zarówno elementy niestandardowe, jak i atrybuty, które dodają funkcjonalności do nasze istniejące komponenty.
Http://learnangular2.com/components/
Ale co wtedy robią dyrektywy w Angular2+ ?
Dyrektywy atrybutów dołączają zachowanie do elementów.
Istnieją trzy rodzaje dyrektyw w Kątowe:
- Komponenty-dyrektywy z szablonem.
- dyrektywy strukturalne-zmiana układ DOM poprzez dodawanie i usuwanie elementów DOM.
- dyrektywy atrybutów-zmieniają wygląd lub zachowanie elementu, komponentu lub innej dyrektywy.
Https://angular.io/docs/ts/latest/guide/attribute-directives.html
Czyli to co dzieje się w Angular2 i wyżej to dyrektywy {[34] } są atrybutami, które dodają funkcje do elementów i elementów.
Spójrz na poniższą próbkę z Angular.io:
import { Directive, ElementRef, Input } from '@angular/core';
@Directive({ selector: '[myHighlight]' })
export class HighlightDirective {
constructor(el: ElementRef) {
el.nativeElement.style.backgroundColor = 'yellow';
}
}
Więc co to robi, rozszerzy ci komponenty i elementy HTML z dodaniem żółtego tła i możesz go użyć jak poniżej:
<p myHighlight>Highlight me!</p>
Ale komponenty będą tworzyć pełne elementy ze wszystkimi funkcjonalnościami jak poniżej:
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)
}
}
I możesz go użyć jak poniżej:
<my-component></my-component>
Gdy użyjemy znacznika w HTML, komponent ten zostanie utworzony i konstruktor zostanie wywołany i wyrenderowany.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-16 00:04:45
Wykrywanie zmian
Tylko @Component
może być węzłem w drzewie wykrywania zmian. Oznacza to, że nie można ustawić ChangeDetectionStrategy.OnPush
w @Directive
. Pomimo tego, dyrektywa może mieć właściwości @Input
i @Output
i można z niej wstrzykiwać i manipulować komponentem hosta ChangeDetectorRef
. Używaj komponentów, gdy potrzebujesz szczegółowej kontroli nad drzewem wykrywania zmian.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-30 04:51:16
W kontekście programowania dyrektywy dostarczają wskazówek dla kompilatora, aby zmienić sposób przetwarzania danych wejściowych, tzn. zmienić pewne zachowanie.
"dyrektywy pozwalają na dołączanie zachowania do elementów w DOM."
Dyrektywy dzielą się na 3 kategorie:
- atrybut
- strukturalne
- komponent
Tak, w Angular 2 komponenty są rodzajem dyrektywy. Według Doc,
"kątowe komponenty są podzbiorem dyrektyw. W przeciwieństwie do dyrektyw, komponenty zawsze mają szablon i tylko jeden komponent może być utworzony dla elementu w szablonie."
Angular 2 Components są implementacją koncepcji Web Component . Web Components składa się z kilku odrębnych technologii. Komponenty WWW można traktować jako widżety interfejsu użytkownika wielokrotnego użytku, które są tworzone przy użyciu technologii Open Web.
- więc w skrócie, mechanizm przez które dołączamy {[24] } do elementów w DOM, składających się ze strukturalnego, Typy atrybutów i komponentów.
- komponenty są szczególnym rodzajem dyrektywy, która pozwala nam wykorzystanie funkcjonalności web component AKA reusability - hermetyzowane elementy wielokrotnego użytku Dostępne w całej naszej aplikacji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-03 12:49:41