【问题标题】:Is it possible to trigger an ion-select change without changing the model?是否可以在不改变模型的情况下触发离子选择变化?
【发布时间】:2020-01-02 15:19:27
【问题描述】:

我在一个虚拟组件中有一个简单的ion-select

    <ion-select
      [value]="objectConfig!.soundType"
      interface="popover"
      (ionChange)="newSoundType.emit($event)"
    >
      <ng-container *ngFor="let soundType of SoundTypesArray">
        <ion-select-option [value]="soundType" id="soundType-{soundType}">
          {{ soundType  }}
        </ion-select-option>
      </ng-container>
    </ion-select>





/// model:
@Input() objectConfig: ObjectConfig

它只有一项工作。告诉我用户何时选择了另一个SoundTypesoundTypeAsoundTypeBsoundTypeC,其中soundTypeC 要求用户执行更多步骤或只是取消)。

我现在遇到的问题是,当用户选择soundTypeC 并取消&lt;ion-select&gt; 框时,即使objectConfig 仍然保持soundTypeA作为soundType 值。

我知道我可以从我的父组件重新发送input(),但我试图防止重绘。是否可以防止ion-select 改变自己的价值并尊重这一点 -> [value]="objectConfig!.soundType"

编辑:

澄清一下:objectConfig 持有 正确 值。我需要ion-select 来反映objectConfig.soundType 所说的内容。

将盒子里的香蕉 ([()]) 与 valuengModel 一起使用无效。

Edit2 Stackblitz: https://stackblitz.com/edit/ionic-select-problem?file=pages%2Fhome%2Fhome.ts

Edit3 Stackblitz: 使用carlosGlegaspi answer 离子选择的外部显示值是正确的,但内部ion-select 仍然保持更改后的值

【问题讨论】:

  • 不能用ngModel代替value属性吗?
  • @Chellappanவ 不,行为完全相同。

标签: angular ionic-framework ionic4


【解决方案1】:

您可以通过使用selectedText property 强制 ion-select 显示 configObject 的值。

在您的示例 HTML 中:

<ion-select
      [ngModel]="configObject.soundType"
      [selectedText]="configObject.soundType"
      interface="popover"
      (ionChange)="newSoundType($event)"
    >

Stackblitz link

【讨论】:

  • 我说得太早了,尽管弹出框内部的值没有从外部改变,但值仍然是SoundTypeC:imgur.com/a/7prEatg
【解决方案2】:

使用carlosGlegaspi answer 作为基础,我设法解决了这个问题,尽管它感觉像是一个 hack。

我不是直接发送一个事件,而是先调用一个函数,然后我还发送一个对ion-select的引用:

 <ion-label>Sound Type</ion-label>
            <ion-select
          #ionSelect
      [ngModel]="configObject.soundType"
      [selectedText]="configObject.soundType"
      interface="popover"
      (ionChange)="newSoundType($event, ionSelect)"
    >

然后在函数中我发送事件但也重置ionSelect的值

public emitNewSoundType(event: CustomEvent<IonSelect>, element: IonSelect): void {
    if (this.trainingConfig) {
      element.value = this.configObject.soundType;
    }
    this.newSoundType.emit(event);
  }

stackblitz 示例(使用 ionic3,因为我无法将 ionic 4 用于 stackblitz)https://stackblitz.com/edit/ionic-select-problem-solution?file=pages%2Fhome%2Fhome.ts

【讨论】:

    【解决方案3】:

    objectConfig 仍然保留旧值,因为您尚未设置双向绑定,即[(value)]="objectConfig!.soundType"

    【讨论】:

    • 我知道,这就是我需要/想要的。旧值是 正确 值。 ion-select 是持有错误的人。
    • 嗨,是的,我相信一旦您执行了 2 方式绑定,您的问题应该可以解决。如果不创建 plunkr 解决方案,我们可以帮助调试。
    • 不,我有香蕉在盒子里,但问题是一样的。我已经在尝试制作 plunkr 或 stackblitz 失败了 :( 我不能带 ionic 去工作
    • 我添加了一个堆栈闪电战 @chirag-patel
    • @distante 它只是一个空白应用程序,请添加一些代码来显示您的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    相关资源
    最近更新 更多