angular / angular/components

*reduce* need for displayWith function on mat-autocomplete

Abierto
#8,436 17 comentarios 10 reacciones 0 asignados Ver en GitHub
area: material/autocomplete feature needs: discussion P4
Lenguaje dominante
TypeScript
Estrellas
25k
Forks
6.8k
Merge medio
1 d 8 h
PR fusionados (30 d)
91

Descripción

#### Bug, feature request, or proposal:
Proposal

#### What is the expected behavior?
A simple way to display the selected autocomplete value in an input field.

#### What is the current behavior?
Currently when you setup an autocomplete and bind a [value] to the , the autocomplete displays the value UNLESS you assign a displayWith function. However, it makes no sense to me to default to showing the [value] since that is intended to be the behind-the-scenes value, not the displayValue. If we simply default to displaying the viewValue somehow, we would no longer need a displayWith function, and that would eliminate numerous other headaches reported in other issues on this forum.

#### What are the steps to reproduce?
Providing a StackBlitz/Plunker (or similar) is the *best* way to get the team to see your issue.

Plunker starter (using on `@master`): https://goo.gl/uDmqyY

StackBlitz starter (using latest `npm` release): https://goo.gl/wwnhMV

This proposal relies on an understanding of the typical autocomplete implementation e.g. here: https://plnkr.co/edit/W9vdWaGcoG90LKM8hHgI?p=preview

#### What is the use-case or motivation for changing an existing behavior?
displayWith function has numerous issues reported. For my purpose I see it as a potential blocker to generating dynamic forms in particular, for reasons i'm glad to detail if need be but I'll spare at this time.

#### Which versions of Angular, Material, OS, TypeScript, browsers are affected?

#### Is there anything else we should know?
i'm guessing the displayWith function was created in the first place to address a legitimate challenge. Namely, the autocomplete control needs a way to know what the displayValue is.

so in the demo example here:

```


None
{{ state.name }}

```
the displayValue is state.name. Perhaps the new syntax that requires no displayValue would be like this:

```


None

```
Such a design would continue to allow flexibility to assign the whole object or a particular field to the [value]..which is important to various use cases out there.

I don't see any downside to eliminating the displayWith function as long as the viewValue is always shown I doubt people would care.

Guía de contribución

Abrir la guía de contribución

Línea de trabajo

Ejecuta primero los ejemplos vinculados de Plunker y StackBlitz para reproducir el comportamiento actual de autocomplete y comparar las alternativas propuestas. El trabajo estará terminado cuando un valor seleccionado pueda mostrar su viewValue sin requerir displayWith, sin dejar de permitir un valor subyacente distinto.

Escrito por el modelo de indexación a partir del texto del issue.

Evaluación

Stack tecnológico
angular, typescript
Área
frontend
Tipo de issue
Nueva funcionalidad
Dificultad
5/5
Tiempo estimado
Más de una semana
Estado de actividad
Estancado
Claridad
Necesita aclaración
Aptitud para principiantes
25/100

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.