Ich lerne Angular2, nach der Arbeit mit Angular1 für ein paar Jahre. Ich erstelle eine Kreditkartenform-Komponente, mit dem Hauptziel, ein paar Schlüsselkonzepte in Angular2 zu lernen. Die Komponente sollte alle Formatierungen verarbeiten und ein Stripe-Token über einen Rückruf zurückgeben. Ich erkannte, dass ich Callbacks auf zwei Arten bearbeiten kann.Angular2 warum @Output über @Input für Rückrufe verwenden
einen @Output Parameter Mit
In meiner Komponente I eine Ausgangsgröße zu definieren und es wie in diesem Beispiel verwenden:
export class CreditCardForm{
....
@Output() callback = new EventEmitter();
....
doCallback(){
this.callback.emit({data: 123});
}
}
// Parent view
<credit-card-form (callback)="creditCardCallback($event)"></credit-card-form>
Mit einer @Input Variable
jedoch , Könnte ich die Callback-Methode (creditCardCallback
, die in der übergeordneten Vorlage verwendet wird) einfach an eine Eingabevariable übergeben, beispielsweise:
export class CreditCardForm{
....
@Input() callback;
....
doCallback(){
this.callback({data: 123});
}
}
// Parent view
<credit-card-form [callback]="creditCardCallback"></credit-card-form>
Die Frage
Warum sollte ich @Output
über @Input
verwenden? Was erreiche ich mit @Output
Variablen statt? Soweit ich sehen kann, fügt dies nur einen Overhead hinzu, indem man die Klasse EventEmitter
nutzt.
Vielen Dank für eine tolle Antwort! Dies überzeugt mich, '@ Output' für Callbacks zu verwenden. Deine Antwort hat mir auch gelehrt, dass es einen Satz wie "Banane in der Box-Syntax" gibt, der beim Googlen zu ein paar lustigen Bildern führt :) –
Ich nehme auch an, dass du mit @ Output die Message Coupling * verwendest im Gegensatz zu * Externe Kopplung * mit '@ Input'. Wenn also der @ @ Input-Parameter im Child nicht definiert ist (hat kein Elternteil?), Dann müssen Sie sich keine Sorgen über 'this.callback && this.callback.call (...)' oder machen 'noOp' Methoden. Aber ich kann ** only ** immer '' Output' 'für Event-Emissionen sehen - * aber ich denke sein schlechtes Design, um deine Event-Typen auf der Komponentenskala im Gegensatz zur App-Skala zu definieren; Es wird Entropie für Ihre App und ihre Ingenieure *. – Cody
Danke Harry! Nur erstaunt, weil ich genau danach suchte. Mein kleines Problem ist: Wie man von hier zu deinem netteren Stil wechselt? –
gtamborero