Uczę się Angular2, po pracy z Angular1 przez kilka lat. Tworzę składnik formularza karty kredytowej, którego głównym celem jest poznanie kilku kluczowych pojęć w Angular2. Komponent powinien obsłużyć całe formatowanie i zwrócić token Stripe poprzez wywołanie zwrotne. Zdałem sobie sprawę, że mogę obsługiwać wywołania zwrotne na dwa sposoby.Angular2 dlaczego używać @Output przez @Input dla callbacków
Użycie parametru @Output
W moim komponentu I zdefiniować zmienną wyjściową i używać go tak jak w poniższym przykładzie:
export class CreditCardForm{
....
@Output() callback = new EventEmitter();
....
doCallback(){
this.callback.emit({data: 123});
}
}
// Parent view
<credit-card-form (callback)="creditCardCallback($event)"></credit-card-form>
Korzystanie @Input zmienną
jednak Mogę po prostu przekazać metodę wywołania zwrotnego (creditCardCallback
, używaną w szablonie nadrzędnym) do zmiennej wejściowej, takiej jak ta:
export class CreditCardForm{
....
@Input() callback;
....
doCallback(){
this.callback({data: 123});
}
}
// Parent view
<credit-card-form [callback]="creditCardCallback"></credit-card-form>
Pytanie
Dlaczego miałbym używać @Output
nad @Input
? Co osiągam przy użyciu zmiennych @Output
? O ile widzę, to tylko dodaje obciążenie, ponieważ musi korzystać z klasy EventEmitter
.
Dziękuję bardzo za wspaniałą odpowiedź! To przekonuje mnie do użycia '@ Output' dla wywołań zwrotnych. Twoja odpowiedź nauczyła mnie również, że istnieje takie sformułowanie jak "banan w składni pudełkowej", co prowadzi do zabawnych zdjęć podczas Googling :) –
Zakładam też, że ponieważ z '@ Wyjście' używasz * Message Coupling * as przeciwieństwie do * External Coupling * z '@ Input'. Więc jeśli w niektórych przypadkach parametr '@ Input' jest niezdefiniowany w elemencie potomnym (nie ma rodzica?), To nie musisz się martwić o" this.callback && this.callback.call (...) "lub Metody 'noOp'. Ale mogę ** tylko ** kiedykolwiek zobaczyć użycie '@ Output' dla emisji zdarzeń - * ale myślę, że jego zły projekt definiuje twoje typy zdarzeń w skali komponentów, w przeciwieństwie do App-Scale; stworzy entropię dla twojej aplikacji i jej inżynierów *. – Cody
Dzięki Harry! Po prostu zdziwiony, bo szukałem dla niego exaclty. Mój mały problem polega na tym, jak przejść z tego miejsca do swojego ładniejszego stylu? –
gtamborero