角材料自动完成忽略第一个单词

时间:2019-04-29 13:51:16

标签: javascript angular autocomplete rxjs angular-material

我正在Angular Material中构建一个简单的查询构建器UI,其中有一个单一的Mat输入,用户可以在其中输入查询内容。作为此过程的一部分,我希望能够提供自动完成功能,但是,我希望在输入上运行此实例的多个实例。每个查询均以单词“ from”开头,然后紧跟一个表名,在该表中我要第一个自动完成功能开始。在表名之后,用户可以选择表的各个字段,这也是我希望能够提供自动完成功能的位置。基本上,有没有一种方法可以使用具有自动完成功能的Angular过滤器,以便能够在某些关键字之后显示自动完成功能?

示例:

from myTable select field1, field2

在上面的示例中,“ myTable”将具有自动完成功能,因为它位于“ from”之后。 “ field1”和“ field2”也将具有,因为它们位于逗号或关键字select之后。在Angular中可能吗?我浏览了这些示例,找不到任何复杂或动态的示例:https://material.angular.io/components/autocomplete/api

这是我目前的尝试,我曾经尝试过使用skip(5)或startwith('from')都没有运气,有人曾经尝试过这种方法吗?

export class SearchNewComponent implements OnInit {
   firstFormGroup: FormGroup;   
   secondFormGroup: FormGroup;   
   priorityCtrl: FormControl = new FormControl();  
   priorities: string[] =['tabl1', 'table2', 'table3'];   
   filteredOptions: Observable<string[]>;

constructor(private formBuilder: FormBuilder) {   }

ngOnInit() {
    this.firstFormGroup = this.formBuilder.group({
      priorityCtrl: ['', Validators.required],
    });

    this.filteredOptions = this.priorityCtrl.valueChanges
      .pipe(
        startWith(''),
        map(val => val.length >= 2 ? this.filter(val) : [])
      );
  }

  filter(val: string): string[] {
    return this.priorities.filter(option =>
      option.toLowerCase().indexOf(val.toLowerCase()) === 0);
  }
}

HTML:

<mat-form-field class="example-full-width" style="width: 95%;">
    <input type="text" placeholder="from table1..." matInput [formControl]="priorityCtrl"
      [matAutocomplete]="auto">
    <mat-icon matSuffix>search</mat-icon>
    <mat-autocomplete #auto="matAutocomplete">
      <mat-option *ngFor="let option of filteredOptions | async" [value]="option">
        {{ option }}
      </mat-option>
    </mat-autocomplete>
  </mat-form-field>

0 个答案:

没有答案