#angular #ionic-framework #ionic3
#angular #ionic-framework #ionic3
Вопрос:
Я использую фреймворк ionic 3. Как изменить значение ngModel? Я хочу переключать все ion-переключать программно.
компонент:
allRecs:any;
constructor(){
this.allRecs = [
{
label: "label 1",
model : "model1"
},
{
label: "label 2",
model : "model2"
},
{
label: "label 3",
model : "model3"
}
]
}
public toggle(flag:boolean){
console.log(flag);
}
HTML:
<ion-item *ngFor="let x of allRecs">
<ion-label> {{x.label}} </ion-label>
<ion-toggle [(ngModel)]="x.model" (ionChange)="toggle(x.model)" item-end>
</ion-toggle>
</ion-item>
Может у кого-нибудь есть идея?
Комментарии:
1. для ion-toggle требуется логическое значение, если вы привяжете к нему логическое значение, оно будет работать, например
model : false
.2. @FatemeFazli да, вы правы, но как я могу обновить его динамически?
3. вы можете обновить свои allRecs, добавив другой attr, например
{ label: "label 3", model : "model3", value: false }
затем измените ngModel на x.value .4. пожалуйста, я добавлю это в качестве ответа.
5. @FatemeFazli можем ли мы подключиться куда-нибудь, если вы не возражаете
Ответ №1:
ion-toggle требуется логическое значение, если вы привяжете его к логическому значению, оно будет работать. в вашем атрибуте allRecs model это строка, поэтому начальное значение не влияет на ion-toggle и не может его изменить. итак, x.model должен быть логическим или добавить новый логический атрибут, например, для значения, чтобы установить его для ngModel:
constructor(){
this.allRecs = [
{
label: "label 1",
value: false
},
{
label: "label 2",
value: false
},
{
label: "label 3",
value: true
}
]
}
toggle(flag:boolean){
for(let i=0;i<this.allRecs.length;i ){
this.allRecs[i].value = flag;
}
}
в html:
<ion-item *ngFor="let x of allRecs">
<ion-label> {{x.label}} </ion-label>
<ion-toggle [(ngModel)]="x.value" (ionChange)="toggle(x.value)" item-end>
</ion-toggle>
</ion-item>
Ответ №2:
Я пытался сделать, как в примере выше, но нуждается в некотором улучшении следующим образом.
constructor(){
this.allRecs = [
{
id: 1, //add this line
label: "label 1",
value: false
},
{
id: 2, //add this line
label: "label 2",
value: false
},
{
id: 3, //add this line
label: "label 3",
value: true
}
]
}
/*
* in this method added new parameter `id: number`
*/
toggle(id: number, flag:boolean) {
for(let i=0;i<this.allRecs.length;i ) {
//check if the current record has the same id
if (this.allRecs[i].id == id) {
this.allRecs[i].value = flag;
}
}
}
в html:
<!-- added new parameter `x.id` when occurs `ionChange` event calling toggle method -->
<ion-item *ngFor="let x of allRecs">
<ion-label> {{x.label}} </ion-label>
<ion-toggle [(ngModel)]="x.value" (ionChange)="toggle(x.id, x.value)" item-end>
</ion-toggle>
</ion-item>
Комментарии:
1. можете ли вы выделить жирным шрифтом то, что вы улучшили в своем коде?