Desidero avere un modello costituito da un'etichetta e una casella di testo. Questo modello può essere riutilizzato in diversi punti della mia pagina. per farlo ho creato un MyTextComponent. Voglio sapere come associare valori diversi all'input dei componenti.Associazione dati angolare2 per componente riutilizzabile personalizzato
ad esempio:
MyTextComponent
import {Component, Input} from 'angular2/core';
@Component({
selector: 'myText',
template:`<label>{{someLabel}}</label>
<input id=myId type="text" [(ngModel)]=bindModelData>
`
})
export class MyTextComponent {
@Input() myId : string;
@Input() bindModelData: any;
}
MyPageComponent
import {Component} from 'angular2/core';
import {MyTextComponent} from './MyTextComponent.component'
@Component({
template:`<myText myId="id1" bindModelData="myString1"></myText>
<myText myId="id2" bindModelData="myString2"></myText>
`,
directives:[MyTextComponent]
})
export class MyPageComponent{
myString1: string;
myString2: string;
}
Come posso legano ngModel dell'ingresso MyTextComponent per MyPageComponent variabile locale?
Edit: provato dopo aver aggiunto @Output, ma non ha funzionato :( l'interpolazione nel MyPageComponent è vuoto, così come il registro sta stampando indefinito Tuttavia l'interpolazione sta lavorando per la mytextComponent Tutte le idee
..import {Component} from 'angular2/core';
import {MyTextComponent} from './myText.component'
@Component({
template:`<myText myId="id1" [(bindModelData)]="myString1"></myText>
<myText myId="id2" [(bindModelData)]="myString2"></myText>
{{myString1}}
{{myString2}}
<button (click)="clicked()">Click Me</button>
`,
directives:[MyTextComponent],
selector:'myPage'
})
export class MyPageComponent{
myString1: string;
myString2: string;
clicked(){
console.log(this.myString1+'--'+this.myString2);
}
}
import {Component,Input,Output,EventEmitter} from 'angular2/core';
@Component({
selector: 'myText',
template:`<label>{{someLabel}}</label>
<input id=myId type="text" [ngModel]=bindModelData (ngModelChange)="updateData($event)">
modeldata - {{bindModelData}}
`
})
export class MyTextComponent {
@Input() myId : string;
@Input() bindModelData: any;
@Output() bindModelDataChanged: any = new EventEmitter();
updateData(event) {
console.log('some random text');
this.bindModelData = event;
this.bindModelDataChanged.emit(event);
}
}
Grazie! Aiuta davvero. Sai, come posso rilevare le modifiche in MyPageComponent in quel caso senza passare funzioni aggiuntive in MyTextComponent? – Alexey
Suppongo che aggiungere 'ngOnChanges() {}' https://angular.io/docs/ts/latest/guide/lifecycle-hooks.html sia quello che stai cercando. Viene chiamato quando cambia un valore '@Input()'. –
C'è un modo per usare 'ngModel' come input associato? per esempio. ' ' con '@Input() ngModel: string;' –