2016-04-29 17 views
0

Ich benutze Winkel 2. Ich habe ein Szenario, wo ich eine Komponente, Schnittstelle und Direktive haben.Hören eines Modells in Komponente Winkel 2

Diese Direktive wird für Autosuggestions verwendet und meine Schnittstelle wird als Modell verwendet.

Also, wenn der Benutzer einen Wert auswählt, aktualisiere ich das Modell und gibt es eine Möglichkeit, wo meine Komponente auf die Modelländerungen hören wird.

directive - model - component interaction

wie wird die Komponente auf die Modelländerungen hören, die ich Richtlinie mache durch? Kann auch ein Modell verwendet werden, um die Daten zu halten?

+0

wie wird hören die Komponente der Modelländerungen, die ich durch Richtlinie mache? Kann auch ein Modell verwendet werden, um die Daten zu halten? – Anuteja

+0

Sie sollten die Frage mit der Frage aktualisieren, es wird besser sein, als es in einem Kommentar zu sagen. – acdcjunior

Antwort

0

Verwenden Eingänge, Ausgänge und verbindlich wie:

(nicht wirklich eine automatische Vervollständigung, aber es sollte Ihnen den Einstieg)

@Component({ 
    selector: 'auto-complete', 
    template: ` 
    <select [(ngModel)]="value" (ngModelChange)="valueChange.emit($event)"> 
    <option *ngFor="#val of values" [value]="val">{{val}}</option> 
    </select>`}) 
export class AutoCompleteComponent { 
    @Input() values:string[]; 
    @Output() valueChange:EventEmitter<string> = new EventEmitter<string>(); 
    value:string; 
} 
@Component({ 
    selector: 'parent', 
    directives: [AutoCompleteComponent], 
    template: ` 
<auto-complete [value]="options" (valueChange)="onUpdate($event)"></auto-complete> 
`}) 
export class AppComponent { 
    options = ['a', 'b', 'c', 'd', 'e']; 
    onUpdate(event) { 
    console.log(event); 
    } 
} 
+0

Gibt es einen Weg, wo ich das emittierte Ereignis nicht in der Vorlage, sondern in meiner Komponente hören kann? – Anuteja

+0

Es könnte einen Weg geben, aber Sie sollten nicht. '@Output()' sollte nur verwendet werden, um '' (outputName) = "..." 'zu binden. Es könnte andere Wege geben. Welches Problem versuchen Sie zu lösen? –

+0

Ich habe eine Direktive für select2 (für Auto-Vervollständigung) eine Basisversion erstellt, die nur select2 auf dem Element aufruft. Diese Direktive wird mehrfach in meiner Anwendung verwendet. Ich möchte ein Ereignis auslösen, wenn der Benutzer etwas auswählt. Dieses Ereignis sollte von der Komponente angehört werden. Und es kann mehrere Komponenten geben, die diese Direktive verwenden. Gibt es einen Weg, auf dem ich für jede Instanz, die ich in der Anwendung verwende, ein eindeutiges Ereignis haben kann? – Anuteja

Verwandte Themen