2016-03-31 8 views
0

Ich habe eine einfache Komponente mit einem Eingang für ein String-Feld:Angular 2 Modelbinding zu Simple (string) nicht funktioniert

import {Component, Input} from 'angular2/core'; 

@Component({ 
    selector: 'mundo-input', 
    template: ` 
     <input class="form-control" [(ngModel)]="zeit" /> 
    ` 
}) 
export class MundoInputComponent { 
    @Input() zeit: string;  
} 

Ich raubend diese Komponente wie folgt aus:

<mundo-input [(zeit)]="myzeit"></mundo-input> 

Die myzeit-Eigenschaft von der äußeren Komponente wird korrekt injiziert. Wenn ich den Wert manuell ändere und auf die äußere Komponente speichere, hat die myzeit-Eigenschaft den alten Wert.

änderte ich die Art der Zeit von Saite zu einem Heldenklasse (wie in den NG2 Tutorial) und verändern die Eingabe zu zeit.name die Bindung. Die Zwei-Wege-Datenbindung funktionierte.

Ist es möglich, an eine Eigenschaft vom Typ string von der äußeren Komponente zu binden? Oder ist es nur mit komplexen Typen (Klassen) möglich?

+0

Was ist der Unterschied zu http://stackoverflow.com/questions/36320605/angular-2-component-modelbinding-is-not-working/36338106#36338106? –

+0

Ich habe zuerst die Frage bearbeitet, die du verlinkt hast, aber zurückgerollt, weil es eine andere Frage ist – Weissvonnix

Antwort

0

Sie benötigen einen ouput Ihrer Komponente hinzufügen zu können, nutzen Zweiweg-Bindung: die Ausgabe

@Component({ 
    selector: 'mundo-input', 
    template: ` 
    <input class="form-control" [ngModel]="zeit" 
       (ngModelChange)="onChange($event)" /> 
    ` 
}) 
export class MundoInputComponent { 
    @Input() zeit: string;  
    @Output() zeitChange:EventEmitter<string> = new EventEmitter(); 

    onChange(val) { 
    this.zeitChange.emit(val); 
    } 
} 

Vereinbarungsgemäß muss die zeitChange müssen in der Lage die Verknüpfung verwenden [(zeit)]="myzeit":

<mundo-input [(zeit)]="myzeit"></mundo-input> 

In Ihrem Fall, dass Sie nur in eine Richtung verwenden für die zeit Parameter verbindlich.

Siehe diese Plunkr: https://plnkr.co/edit/snaM4y?p=preview.

+0

, die Sinn macht, aber es funktioniert immer noch nicht. Warum brauche ich eine Ausgabe für einen einfachen Typ, aber Klassen funktionieren ohne Ausgabe? – Weissvonnix

+0

Mit primitiven Typ können Sie nicht als Referenz für Updates innerhalb der Unterkomponente arbeiten ... –

+0

Ich habe eine funktionierende Plunkr in meiner Antwort hinzugefügt. –

Verwandte Themen