【问题标题】:Ionic3 - How to update value of dynamic ngModel?Ionic3 - 如何更新动态 ngModel 的值?
【发布时间】:2019-04-07 10:36:44
【问题描述】:

我正在使用 ionic 3 框架。如何更改 ngModel 的值?我想以编程方式切换所有离子切换。

组件

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>

任何人都可以有想法吗?

【问题讨论】:

  • ion-toggle 需要一个布尔值,如果将其绑定为布尔值,它将起作用,例如 model : false
  • @FatemeFazli 是的,你是对的,但我怎样才能动态更新它?
  • 您可以通过添加另一个属性来更新您的 allRecs,例如 { label: "label 3", model : "model3", value: false } 然后将 ngModel 更改为 x.value 。
  • 不客气,我会添加它作为答案。
  • @FatemeFazli 如果您不介意,我们可以在某个地方连接

标签: angular ionic-framework ionic3


【解决方案1】:

ion-toggle 需要一个布尔值,如果将它绑定到布尔值,它将起作用。 在您的 allRecs 模型属性中是字符串,因此初始值不会影响 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>
    

    【讨论】:

    • 你能用粗体突出你在代码中改进的地方吗?
    猜你喜欢
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 2018-08-17
    • 2012-12-24
    相关资源
    最近更新 更多