Skip to content

Commit aa51ba5

Browse files
authored
docs: add signal form example for autocomplete (#33852)
1 parent 34b3c12 commit aa51ba5

5 files changed

Lines changed: 58 additions & 1 deletion

File tree

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
.example-form {
2+
min-width: 150px;
3+
max-width: 500px;
4+
width: 100%;
5+
}
6+
7+
.example-full-width {
8+
width: 100%;
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<form class="example-form">
2+
<mat-form-field class="example-full-width">
3+
<mat-label>Number</mat-label>
4+
<input type="text"
5+
placeholder="Pick one"
6+
aria-label="Number"
7+
matInput
8+
[formField]="form"
9+
[matAutocomplete]="auto">
10+
<mat-autocomplete autoActiveFirstOption #auto="matAutocomplete">
11+
@for (option of filteredOptions(); track option) {
12+
<mat-option [value]="option">{{option}}</mat-option>
13+
}
14+
</mat-autocomplete>
15+
</mat-form-field>
16+
</form>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import {Component, computed, signal} from '@angular/core';
2+
import {MatAutocompleteModule} from '@angular/material/autocomplete';
3+
import {MatInputModule} from '@angular/material/input';
4+
import {MatFormFieldModule} from '@angular/material/form-field';
5+
import {form, FormField} from '@angular/forms/signals';
6+
7+
/**
8+
* @title Highlight the first autocomplete option (signal forms)
9+
*/
10+
@Component({
11+
selector: 'autocomplete-auto-active-first-option-signal-form-example',
12+
templateUrl: './autocomplete-auto-active-first-option-signal-form-example.html',
13+
styleUrl: './autocomplete-auto-active-first-option-signal-form-example.css',
14+
imports: [MatFormFieldModule, MatInputModule, MatAutocompleteModule, FormField],
15+
})
16+
export class AutocompleteAutoActiveFirstOptionSignalFormExample {
17+
protected form = form(signal(''));
18+
19+
protected filteredOptions = computed<string[]>(() => {
20+
const formValue = this.form().value();
21+
return this._filter(formValue);
22+
});
23+
24+
private _options = ['One', 'Two', 'Three'] as const;
25+
26+
private _filter(value: string): string[] {
27+
const filterValue = value.toLowerCase();
28+
29+
return this._options.filter(option => option.toLowerCase().includes(filterValue));
30+
}
31+
}

‎src/components-examples/material/autocomplete/autocomplete-auto-active-first-option/autocomplete-auto-active-first-option-example.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {MatInputModule} from '@angular/material/input';
88
import {MatFormFieldModule} from '@angular/material/form-field';
99

1010
/**
11-
* @title Highlight the first autocomplete option
11+
* @title Highlight the first autocomplete option (reactive forms)
1212
*/
1313
@Component({
1414
selector: 'autocomplete-auto-active-first-option-example',

‎src/components-examples/material/autocomplete/index.ts‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
export {AutocompleteAutoActiveFirstOptionExample} from './autocomplete-auto-active-first-option/autocomplete-auto-active-first-option-example';
2+
export {AutocompleteAutoActiveFirstOptionSignalFormExample} from './autocomplete-auto-active-first-option-signal-form/autocomplete-auto-active-first-option-signal-form-example';
23
export {AutocompleteDisplayExample} from './autocomplete-display/autocomplete-display-example';
34
export {AutocompleteFilterExample} from './autocomplete-filter/autocomplete-filter-example';
45
export {AutocompleteOptgroupExample} from './autocomplete-optgroup/autocomplete-optgroup-example';

0 commit comments

Comments
 (0)