2016-08-09 18 views
14

Angular 2 ngModel Richtlinie mit Variablen und Funktionen wieAngular 2 ngModel Richtlinie Erweiterung Observablen

<input [ngModel]="myVar" (ngModelChange)="myFunc($event)" />

Anstelle von Variablen und Funktionen arbeitet zu verwenden, würde Ich mag stattdessen BehaviorSubjects verwenden

<input [ngModel]="mySubject | async" (ngModelChange)="mySubject.next($event)" />

Gibt es eine sichere Möglichkeit, ngModel zu erweitern oder eine Art Makro zu verwenden, um Wiederholungen in meinen Vorlagen zu reduzieren?

<input [myNewNgModel]="mySubject" />

+1

Klingt wie Sie für so etwas wie https suchen: // GitHub. com/eckig/eckig/Ausgaben/4062. Ich bin sicher, dass dies zu Angular2 kommen wird, aber erst nach der Veröffentlichung. –

+0

@ GünterZöchbauer Gut zu wissen es gibt andere die versuchen alles zu raxen. Der Hauptunterschied ist, dass ich versuche, ngModel mit Observables zu erweitern/wiederzuverwenden, während der Vorschlag sich auf die Bindung von Ereignissen an Observable konzentriert. – nwarp

+0

Wurde das irgendwann gelöst? Ich freue mich, eine Antwort schreiben zu können, aber derzeit habe ich Schwierigkeiten zu verstehen, ob Sie diese Eingaben tatsächlich als Teil eines Formulars verwenden möchten. Wenn ja, haben Sie daran gedacht, auf die beobachtbare Form zu hören? Wenn nicht, können Sie bitte einen Hintergrund geben, wie Sie Ihr BehaviorSubject verwenden? Es gibt sicherlich Anwendungsfälle dafür, aber wenn wir neu bei RxJS sind, neigen wir dazu, die Themen ein wenig zu überfrachten. –

Antwort

0

ein wenig zu spät zur Party, aber ich glaube, dass Sie daran interessiert waren:

@Component({ 
 
    selector: 'app-home', 
 
    templateUrl: './home.component.html', 
 
    styleUrls: ['./home.component.less'] 
 
}) 
 
export class HomeComponent implements OnInit { 
 
    model: Observable<number[]>; 
 

 
    ngOnInit() { 
 
    this.model = this.get(); 
 
    } 
 

 
    get(): Observable<number[]> { 
 
    return Observable.from([[1, 2, 3]]); 
 
    } 
 
} 
 

 
@Component({ 
 
    selector: 'app-child', 
 
    templateUrl: './child.component.html', 
 
    styleUrls: ['./child.component.css'] 
 
}) 
 
export class ChildComponent implements OnInit { 
 
    @Input() numbers; 
 
    constructor() { } 
 

 
    ngOnInit() { 
 
    } 
 

 
}
<app-child [numbers]="(model | async)"></app-child> 
 

 
<!-- child component --> 
 
<h1 *ngFor="let i of numbers">{{i}}</h1>

Verwandte Themen