angular / components

Component infrastructure and Material Design components for Angular
https://material.angular.io
MIT License
24.35k stars 6.74k forks source link

bug(Datepicker): setting value inside valueChanges doesn't update the UI #27983

Open dana-c0914 opened 1 year ago

dana-c0914 commented 1 year ago

Is this a regression?

I don't know if this was working at some point or not

Description

I am using reactive forms to get/set values from a datepicker and I noticed that if I set a date manually, inside the valueChanges event based on some condition, the value of the form control updates, but not the UI.

The UI changes however if you remove the input and manually set a value inside valueChanges.

Reproduction

StackBlitz link: https://stackblitz.com/edit/qpu5ns Steps to reproduce (1): (1*. Select any date - optional)

  1. Select the 10th of any month
  2. Check date displayed in input vs date printed under the input

Expected Behavior

We have the same date in the input as printed below the input

Actual Behavior

The date in the input is the date selected using the datepicker, the date below the input is the date set inside valueChanges

Environment

Browser: Chrome (From the stackblitz environment) Angular CLI: 16.1.0 Node: 18.18.0 Package Manager: yarn 1.22.19 OS: linux x64

Angular: 16.1.1 ... animations, common, compiler, compiler-cli, core, forms ... platform-browser, platform-browser-dynamic, router

Package Version
@angular-devkit/architect 0.1601.0
@angular-devkit/build-angular 16.1.0
@angular-devkit/core 16.1.0
@angular-devkit/schematics 16.1.0
@angular/cdk 16.2.9
@angular/cli 16.1.0
@angular/material 16.2.9
@angular/material-moment-adapter 16.2.9
@schematics/angular 16.1.0
rxjs 7.4.0
typescript 5.0.3
mmalerba commented 12 months ago

Confirmed, as a workaround you can wrap your setValue call in a Promise.resolve(): https://stackblitz.com/edit/qpu5ns-pb413w?file=src%2Fexample%2Fdatepicker-api-example.ts