javascript - Angular 重置下拉值 primeng

标签 javascript angular typescript primeng

大家好,我需要一些关于 Angular 和 Primeng 组件的帮助,接下来就是场景了。

我有一个模型:

export class Properties {
    public IdFittingConnector: number;
    public IdProperty: number;
    public IdGroup: number;
    public OrderAparitionNumber: number;
    public OrderCodePos: number;
    public ConnectorDescription: string;
    public PropertyDescription;
    public Values: FittingPropertiesValues[];
    public Disabled: boolean;
    public SelectedData: FittingPropertiesValues;
}

这个模型存储在一个数组中,所以我为数组中的每个项目创建一个选择/下拉列表

<div *ngFor="let item of arrFittingsCombos;  let i = index">
    <h4>{{item.PropertyDescription}}</h4>
    <p-dropdown [(disabled)]="item.Disabled" [options]="item.Values" optionLabel="IrredutibleFractionValue" [(ngModel)]="item.SelectedData" [showClear]="true" (onChange)="OnFittingComboChange($event)" placeholder="Select Item" [style]="{'width':'100%'}"></p-dropdown>
</div>

就像你们看到的那样,在模型中我有一个存储下拉值的 Prop ,称为“值”,在同一模型上,我将选定的选项存储在名为“SeloectedData”的 Prop 上。

接下来是大事。

我有几个验证,问题是我有两个下拉菜单,但如果第二个值大于第一个下拉值,我需要重置第二个下拉菜单。我给你看逻辑代码……

if (selectedOption.IdProperty == 5) {
    let diam: number = this.arrFittingsCombos.filter(x => x.IdProperty == 1)[0].SelectedData.NumberValue;

    if (selectedOption.NumberValue > diam) {
        alert("Seleccion invalida, la selección es mayor que el primer diametro");
        this.arrFittingsCombos.filter(x => x.IdProperty == 5)[0].SelectedData = null;
        this.searchBtnDisabled = true;
    }
}

如您所见,我正在重置 [(ngModel)],实际上它确实如此,但在下拉列表中显示的标签仍然存在。我做错了什么?如果第一次验证没问题 First DropDown Value < Second DropDown Value 然后我将第二个下拉值更改为 > first DropDown value 行为是所需的行为但之后显示的标签不再重置。

非常感谢您抽出时间,我希望您能给我一点启发。

最佳答案

我在 HTML 中有解决方案,我添加了 Angular 标识符:

#dropdown_i 

<div *ngFor="let item of arrFittingsCombos;  let i = index">
    <h4>{{item.PropertyDescription}}</h4>
    <p-dropdown #dropdown_i [(disabled)]="item.Disabled" [options]="item.Values" optionLabel="IrredutibleFractionValue" [(ngModel)]="item.SelectedData" [showClear]="true" (onChange)="OnFittingComboChange($event, drop_i)" placeholder="Select Item" [style]="{'width':'100%'}"></p-dropdown>
</div>

然后在 typescript 代码中我收到参数中的下拉菜单。

OnFittingComboChange(event, dropdown: Dropdown) {
  //TODO logic code here...
}

最后,使用名为 dropdown.clear() 的下拉菜单方法,我可以重置选择的选项。

if (drop.value != null &&  selectedOption.IdProperty == 5) {
    let diam: number = this.arrFittingsCombos.filter(x => x.IdProperty == 1)[0].SelectedData.NumberValue;

    if (selectedOption.NumberValue > diam) {
        this.messageService.add({ severity: 'warn', summary: 'Validación', detail: 'Seleccion invalida, la selección es mayor que el primer diametro' });
        drop.clear(null);
        this.searchBtnDisabled = true;
    }
}

现在当条件正常时,元素被正确清除并且行为是期望的。

关于javascript - Angular 重置下拉值 primeng,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53439091/

相关文章:

javascript - 使用 XML 解析器从用户获取最近的 YouTube 视频

javascript - 来自 Angular 的 Http Post 请求不起作用

javascript - 如何在 Angular2 中访问来自 GET 操作的 json

angular - 如何在循环中发送 http get 方法 Typescript

javascript - Angular JS - 如何将表单验证作为全局服务?最佳实践

javascript - Ember Handlebars 生成表

Javascript 底层 toString 转换

javascript - 正式更改 Angular 4 中的选择框动态

TypeScript 安全函数组合

javascript - 无法在 React.js 上从 svg 加载图像