mirror of
https://github.com/angular/angular.git
synced 2026-09-14 13:54:52 +08:00
fix(autocomplete): error if panel is added asynchronously (#7078)
Fixes an error that was thrown when an autocomplete trigger is initialized without a panel. Note that an error will still be thrown, but only if the user attempts to open the panel. Fixes #7069.
This commit is contained in:
committed by
Andrew Seguin
parent
8e7726102b
commit
504ba70abd
@@ -390,7 +390,9 @@ export class MatAutocompleteTrigger implements ControlValueAccessor, OnDestroy {
|
||||
}
|
||||
|
||||
private _setTriggerValue(value: any): void {
|
||||
const toDisplay = this.autocomplete.displayWith ? this.autocomplete.displayWith(value) : value;
|
||||
const toDisplay = this.autocomplete && this.autocomplete.displayWith ?
|
||||
this.autocomplete.displayWith(value) :
|
||||
value;
|
||||
|
||||
// Simply falling back to an empty string if the display value is falsy does not work properly.
|
||||
// The display value can also be the number zero and shouldn't fall back to an empty string.
|
||||
|
||||
@@ -1512,6 +1512,15 @@ describe('MatAutocomplete', () => {
|
||||
}).toThrow(getMatAutocompleteMissingPanelError());
|
||||
}));
|
||||
|
||||
it('should not throw on init, even if the panel is not defined', fakeAsync(() => {
|
||||
expect(() => {
|
||||
const fixture = TestBed.createComponent(AutocompleteWithoutPanel);
|
||||
fixture.componentInstance.control.setValue('Something');
|
||||
fixture.detectChanges();
|
||||
tick();
|
||||
}).not.toThrow();
|
||||
}));
|
||||
|
||||
it('should hide the placeholder with a preselected form control value ' +
|
||||
'and a disabled floating placeholder', fakeAsync(() => {
|
||||
const fixture = TestBed.createComponent(AutocompleteWithFormsAndNonfloatingPlaceholder);
|
||||
@@ -1885,10 +1894,11 @@ class AutocompleteWithNativeInput {
|
||||
|
||||
|
||||
@Component({
|
||||
template: `<input placeholder="Choose" [matAutocomplete]="auto">`
|
||||
template: `<input placeholder="Choose" [matAutocomplete]="auto" [formControl]="control">`
|
||||
})
|
||||
class AutocompleteWithoutPanel {
|
||||
@ViewChild(MatAutocompleteTrigger) trigger: MatAutocompleteTrigger;
|
||||
control = new FormControl();
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user