首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >垫子-选择确认选择

垫子-选择确认选择
EN

Stack Overflow用户
提问于 2019-06-24 19:46:31
回答 1查看 1.6K关注 0票数 0

我有一个mat-select绑定到一个对象Id,当我更改选项时,我打开一个确认警报,我希望所选的选项只在我说“确定”时更改,如果我说“确定”,如果我取消它,我尝试选择的选项保持选中,不是在值上,而是在显示上。

我尝试将ngModel设置为相同的,但这没有任何作用,因为我的ngModel值没有被更改,只有选中的选项。

代码语言:javascript
复制
<mat-select title="Repartidor" placeholder="Repartidor" [ngModel]="order._ShippingProviderId" (selectionChange)="shippingProviderChange(order, $event)">
    <mat-option *ngFor="let driverStatus of driverStatuses" [value]="driverStatus._ShippingProvider._Id"> 
        {{driverStatus._ShippingProvider._Name}}
    </mat-option>
</mat-select>
代码语言:javascript
复制
shippingProviderChange(order: IOrder, event: MatSelectChange){
        if(confirm("¿Quieres asignar este repartidor?")) {
            // change option
            console.log(order._ShippingProviderId);
            order._ShippingProviderId = event.value;
            console.log(order._ShippingProviderId);
        }
        else{
            // keep the same option selected
        }
}

mat-select保留我没有确认的选项,而不是保留最后一个选项。将选项重置为none不是一个选项,因为我的选项被绑定到对象。

更新#1:

我尝试过这样做,它确实将选定的值更改为上一个值,但它没有将所选的选项设置为它的原始状态。

代码语言:javascript
复制
else{ 
    var same = order._ShippingProviderId; 
    order._ShippingProviderId = undefined;
    order._ShippingProviderId = same;
}
EN

回答 1

Stack Overflow用户

发布于 2020-09-23 16:27:21

我们发现处理这些问题的最佳方法是设置一个单独的变量来跟踪实际值,并根据确认结果有条件地设置它。mat-select-trigger移除它的外观,来回切换。

如果有任何事情取决于基于此的选择、更改和运行代码的值,则不必担心。它可以根据实际跟踪值的变量的变化(在本例中为selectedValue )运行,也可以在onSelectionChanged方法内触发。

html:

代码语言:javascript
复制
<mat-select
   [(ngModel)]="userSelectedValue"
   (selectionChange)="onProgramChanged($event.value)">
    <mat-select-trigger>{{selectedValue}}</mat-select-trigger>
    <mat-option *ngFor="let option of myOptions> {{option}}<mat-option>
</mat-select>

ts:

代码语言:javascript
复制
userSelectedValue; // ngmodel value
selectedValue; // actual value you use

onSelectionChanged() {
   this.openConfirmationDialog((confirmed) => {   //prompt user for confirmation
       if(confirmed === 'confirm') {
         this.selectedValue = this.userSelectedValue;
         this.dologic()
       } else {
         this.userSelectedValue= this.previousUserSelectedValue;
       }
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56743028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档