首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular Query-builder:如何懒惰地加载材料自动完成选项(可能值)的数据

Angular Query-builder:如何懒惰地加载材料自动完成选项(可能值)的数据
EN

Stack Overflow用户
提问于 2020-03-26 17:40:39
回答 1查看 813关注 0票数 1

我目前正在使用Angular-QueryBuilder,并使用angular-materialng-container一起更新模板。

代码语言:javascript
复制
  <!-- Override input component for 'category' type -->
  <ng-container *queryInput="let rule; let field=field; let options=options; type: 'category'">
    <mat-form-field class="categoryValue" floatLabel="never">
      <mat-select [(ngModel)]="rule.value" [placeholder]="field.name">
        <mat-option *ngFor="let opt of options" [value]="opt.value">
          {{ opt.name }}
        </mat-option>
      </mat-select>
    </mat-form-field>
  </ng-container>

我的要求是为options动态加载数据。例如,在用户开始键入后,从服务器加载此字段的数据(我将使用mat-auto-complete而不是mat-select)。在为示例创建stackblitz时,我面临着一些挑战。(目前:https://stackblitz.com/edit/angular-8-material-starter-template-lpmxwi)

如果有人已经实现了这样的东西,或者给出了一些方向,那就太好了。

更新:

我想强调的是,使用材料自动完成不是一个问题。为查询构建器组件集成自动完成和动态更新它的值是问题所在。如果我在初始化后以编程方式更新查询构建器,则它不会填充值,如下所示。

代码语言:javascript
复制
  onFieldChange ($event, rule) { // gets called when I change the field dropdown
    if (this.params.config.fields[$event].type === 'category') {
        // updating 'options' (like male and female) dynamically
        // in actual scenario, I will be calling server to get its' values
        this.params.config.fields[$event].options = [
          { name: 'Aaa', value: 'a' },
          { name: 'Bbbb', value: 'b' },
          { name: 'Cccc', value: 'c' },
          { name: 'Dddd', value: 'd' }
        ];
    }
  }
EN

回答 1

Stack Overflow用户

发布于 2020-03-26 18:02:13

您所能做的就是为您的输入创建一个FormControl,您将在其中输入

代码语言:javascript
复制
myControl = new FormControl();

然后将其与HTML中的输入相关联

代码语言:javascript
复制
<input type="text"
       placeholder="Search"
       aria-label="Search"
       matInput
       [formControl]="myControl"
       [matAutocomplete]="auto">

最后,在组件中监听值更改并请求新数据,然后将其设置为您的选项

代码语言:javascript
复制
this.myControl.valueChanges
  .pipe(
    filter(searchPhrase => !!searchPhrase),
    debounceTime(500),
    distinctUntilChanged(),
    takeUntil(this.ngUnsubscribe) // optional but recommended 
  )
  .subscribe(searchPhrase => this.service.searchMyOptions(searchPhrase));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60864433

复制
相关文章

相似问题

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