【问题标题】:Multiple autocomplete in same page with different source in angular 4 with angular material具有角度材料的角度 4 中具有不同来源的同一页面中的多个自动完成
【发布时间】:2018-02-06 14:57:32
【问题描述】:

在同一页面中使用角度 4 中不同来源的多个自动完成功能:

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

我遵循了材料自动完成示例,并尝试在同一页面中再添加一个自动完成,但来源不同但无法正常工作。

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>

【问题讨论】:

    标签: angular angular-material angular-material2


    【解决方案1】:

    您为两个输入分配了相同的参考变量 (#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 这样的循环,不需要创建动态命名的模板变量,因为

    模板引用变量的范围仅限于它们所在的模板 定义在。结构指令创建一个嵌套模板,并且, 因此,引入了一个单独的范围。 (This question)

    【讨论】:

    • 谢谢兄弟..我还有一个疑问..当我将自动完成和 md -select 放在同一页面中时,两者都没有正确对齐..因为 md-select 即将到来。
    • 能否请您在同一个 plunker 示例中添加一个 md-select 选项,你会一样的。
    • 谢谢.. 我一直在兜圈子试图弄清楚这一点。
    • 如何调用对不同组件的自动完成引用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 2018-06-21
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多