angular - 具有 Angular Material 的 Angular 4 中具有不同源的同一页面中的多个自动完成

标签 angular angular-material angular-material2

在具有 Angular Material 的 Angular 4 中具有不同源的同一页面中的多个自动完成:

来源:https://material.angular.io/components/autocomplete/examples

我遵循了 Material 自动完成示例并尝试在同一页面中添加一个自动完成但来源不同但不起作用。

是 formcontrol 产生了问题吗??

import {Component} from '@angular/core';
import {FormControl} from '@angular/forms';

import 'rxjs/add/operator/startWith';
import 'rxjs/add/operator/map';

@Component({
  selector: 'autocomplete-overview-example',
  templateUrl: 'autocomplete-overview-example.html',
})
export class AutocompleteOverviewExample {
  stateCtrl: FormControl;
  testCtrl: FormControl;
  filteredStates: any;
  filterTests:any;
tests = [
    'Nawab',
    'Alaska',
    'Arizona',
    'Arkansas',
    'California'];
  states = [
    'Alabama',
    'Alaska',
    'Arizona',
    'Arkansas',
    'California',
    'Colorado',
    'Connecticut',
    'Delaware',
    'Florida',
    'Georgia',
    'Hawaii',
    'Idaho',
    'Illinois',
    'Indiana',
    'Iowa',
    'Kansas',
    'Kentucky',
    'Louisiana',
    'Maine',
    'Maryland',
    'Massachusetts',
    'Michigan',
    'Minnesota',
    'Mississippi',
    'Missouri',
    'Montana',
    'Nebraska',
    'Nevada',
    'New Hampshire',
    'New Jersey',
    'New Mexico',
    'New York',
    'North Carolina',
    'North Dakota',
    'Ohio',
    'Oklahoma',
    'Oregon',
    'Pennsylvania',
    'Rhode Island',
    'South Carolina',
    'South Dakota',
    'Tennessee',
    'Texas',
    'Utah',
    'Vermont',
    'Virginia',
    'Washington',
    'West Virginia',
    'Wisconsin',
    'Wyoming',
  ];

  constructor() {
    this.stateCtrl = new FormControl();
    this.filteredStates = this.stateCtrl.valueChanges
        .startWith(null)
        .map(name => this.filterStates(name));
        this.testCtrl = new FormControl();
    this.filteredTests = this.testCtrl.valueChanges
        .startWith(null)
        .map(name => this.filterTests(name));
  }

  filterStates(val: string) {
    return val ? this.states.filter(s => s.toLowerCase().indexOf(val.toLowerCase()) === 0)
               : this.states;
  }
  filterTests(val: string) {
    return val ? this.tests.filter(s => s.toLowerCase().indexOf(val.toLowerCase()) === 0)
               : this.tests;
  }

}


/**  Copyright 2017 Google Inc. All Rights Reserved.
    Use of this source code is governed by an MIT-style license that
    can be found in the LICENSE file at http://angular.io/license */
<md-input-container>
  <input mdInput placeholder="State" [mdAutocomplete]="auto" [formControl]="stateCtrl">
</md-input-container>

<md-autocomplete #auto="mdAutocomplete">
  <md-option *ngFor="let state of filteredStates | async" [value]="state">
    {{ state }}
  </md-option>
</md-autocomplete>
<md-input-container>
  <input mdInput placeholder="Test" [mdAutocomplete]="auto" [formControl]="testCtrl">
</md-input-container>

<md-autocomplete #auto="mdAutocomplete">
  <md-option *ngFor="let test of filteredTests | async" [value]="test">
    {{ test }}
  </md-option>
</md-autocomplete>

最佳答案

您将相同的引用变量 (#auto) 分配给两个输入。每个输入的 id 必须是唯一的。将您的第二个 inputmd-autocomplete 更改为以下内容:

<md-input-container>
  <input mdInput placeholder="Test" [mdAutocomplete]="autoTest" [formControl]="testCtrl">
</md-input-container>
<md-autocomplete #autoTest="mdAutocomplete">
  <md-option *ngFor="let test of filteredTests | async" [value]="test">
    {{ test }}
  </md-option>
</md-autocomplete>

链接到 Plunker Demo


对于像*ngFor这样的循环,不需要创建动态命名的模板变量,因为

Template reference variables are scoped to the template they are defined in. A structural directive creates a nested template and, therefore, introduces a separate scope. (This question)

关于angular - 具有 Angular Material 的 Angular 4 中具有不同源的同一页面中的多个自动完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45934244/

相关文章:

Angular 垫表 - 让点击事件工作

css - images/css/js 等静态文件的相对路径

Angular Material : CheckBox in mat-menu; Problem with dark themes

angular - 在 Angular2 中,我有一个不需要模板的组件,但我仍然收到模板错误

css - 有没有办法在 md-sidenav 中配置显示隐藏速度?

html - 如何更改 ng-required 中星号符号的颜色

angular - 选项卡选定索引内的垫选项卡不起作用

javascript - 如何将整个对象传递给 md-autocomplete Angular 4 的输入

angular - Angular中如何实现多级路由?

Angular 2 : Cannot find namespace 'environment'