【问题标题】:Getting autocomplete placeholder and formControlName in Angular在 Angular 中获取自动完成占位符和 formControlName
【发布时间】:2021-02-03 23:31:54
【问题描述】:

我正在根据文档中的示例使用带有输入的 ma​​t-autocomplete 组件,并且我已经使用 placeholder 和 formControlName 像这样:

<mat-form-field class="example-full-width">
    <input type="text" placeholder="Persona*" aria-label="Number" matInput formControlName="idPersona"
    [matAutocomplete]="autoPersonas">

    <mat-autocomplete autoActiveFirstOption #autoPersonas="matAutocomplete"
        [displayWith]="displayPersona(filteredOptionsPersonas | async)" (optionSelected)="selectedValue($event)">
        <mat-option *ngFor="let option of filteredOptionsPersonas" [value]="option.idPersona">
            <p>{{option.nombre}}</p>
        </mat-option>
    </mat-autocomplete>
</mat-form-field>

我也在使用 optionSelected,它从 mat-autocomplete 发出 MatAutocompleteSelectedEvent 来保持视图值(选择的选项)、值、formControlName 和占位符。问题是我无法从事件对象 MatAutocompleteSelectedEvent 到达最后两个(formControlName 和占位符)。有没有办法到达这些属性?

【问题讨论】:

    标签: angular autocomplete angular-reactive-forms


    【解决方案1】:

    您可以将它们传递给optionSelected 的处理程序。

    所以方法签名可以改为selectedValue(autoCompleteEvent: MatAutocompleteSelectedEvent, placeholder: string, controlName: string )

    在您的模板中:(optionSelected)="selectedValue($event, 'Persona*', 'idPersona')"

    在这里猜测一下,但如果您的用例是清理控件,那么您可以在控制器中通过订阅控件更改来完成它,并像这样创建一个 observable:

    this.formGroup.get('idPersona').valueChanges.subscribe(() => {
      this.formGroup.get('idPersona').setValue(null, {emitEvent: false});
    });
    

    将值设置为空字符串或 null/undefined 将使占位符重新出现。

    【讨论】:

    • 谢谢@tropicana ...我想也许有一个更清洁的选择。我这样做是因为我想保留所有表单输入中的一些数据,以便在确认/提交表单之前显示概览。
    • 您可以从 FormGroup 中获取数据,然后当它的值发生变化或“按需”时。 - this.myFormGroup.valueChanges.subscribe(...)this.myFormGroup.getValue();
    • 是的,但我只在 myformGroup 中存储 id 值,所以我想概述每个输入中显示的文本数据,而不是 id。我想我无法获得订阅 myFormGroup 的信息...
    • 您可以添加对 ElementRef 的引用,然后使用 getElemementsByTagName('input') 查询输入。对于每个输入子项,应该有一个 value 属性保存您需要的信息。对于每个输入,您还可以查询属性并获取 formControlName,然后您可以将视图值与表单控件 Id 匹配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 2020-08-13
    • 2017-09-22
    • 1970-01-01
    相关资源
    最近更新 更多