angular / angular/components

bug([MatChipInput]): matChipInputAddOnBlur: true + selecting option by click inserts 2 chips

Offen
#28,173 1 Kommentar 6 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
area: material/autocomplete area: material/chips P3
Vorherrschende Sprache
TypeScript
Sterne
25k
Forks
6.8k
Ø Merge
1 T. 8 Std.
Gemergte PRs (30 T.)
91

Beschreibung

### Description

This is an intentional duplicate of https://github.com/angular/components/issues/19279, because it's been closed with a workaround that no longer works with the new Angular Material components (v15+).

The workaround was to set `matChipInputAddOnBlur` to `false` and handle the `(blur)` event on our own while ignoring the one that is related (`relatedTarget`) to `mat-option` element, however, now, clicking the `mat-option` will fire the `FocusEvent` with `relatedTarget: null`.

My updated (and working) workaround looks like this:
```
addOnBlur(event: FocusEvent) {
const target: HTMLElement = event.relatedTarget as HTMLElement;

if (!target) {
return;
}

this.addCustomChip(this.itemInput.nativeElement.value); // or manually create MatChipInputEvent etc...
}
```

However, the original issue is still there and it shouldn't require any workaround in the first place.

### Reproduction

https://stackblitz.com/edit/angular-rd38q1-b74xmz?file=src%2Fapp%2Fchips-autocomplete-example.ts,package.json,src%2Fapp%2Fchips-autocomplete-example.html,src%2Fmain.ts
![81319947-011e3200-90c3-11ea-8cd3-4556ec9ff622](https://github.com/angular/components/assets/32791888/69bf1bf5-5da3-49ae-b633-1c7a67791e88)

### Expected Behavior

Only the selected option should become a chip

### Actual Behavior

The input text also becomes a chip

### Environment

- Angular: v15+
- CDK/Material: v15+
- Browser(s): Chrome
- Operating System (e.g. Windows, macOS, Ubuntu): Windows

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne mit der verknüpften StackBlitz-Reproduktion, insbesondere mit src/app/chips-autocomplete-example.ts, src/app/chips-autocomplete-example.html und package.json, und reproduziere den Auswahlablauf per Klick in Chrome. Die Arbeit ist abgeschlossen, wenn die Auswahl einer mat-option nur diese Option als Chip hinzufügt und nicht zusätzlich den Eingabetext.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
angular, typescript
Bereich
frontend
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Ruhig
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
55/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.