问题
Multiple autocomplete in same page with different source in angular 4 with angular material:
source :https://material.angular.io/components/autocomplete/examples
I have followed the material autocomplete example and trying to add one more autocomplete in the same page but the source is different but not working.
Is formcontrol is creating problem ??
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>
回答1:
You have the same reference variable (#auto
) assigned to both inputs. The id needs to be unique for each input. Change your second input
and md-autocomplete
to following:
<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>
Link to Plunker Demo
来源:https://stackoverflow.com/questions/45934244/multiple-autocomplete-in-same-page-with-different-source-in-angular-4-with-angul