это одно решение проблемы
this.control.setValue('2'); // I move any changes at the top for startWith operater
this.name$ = this.control.valueChanges
.pipe(
startWith(this.control.value),
map((name) => {
console.log('fired', name)
return name;
})
);
Еще один способ заставить его работать без оператора async
. Это означает, что я подписался на изменения значения до того, как контрольное значение изменилось на '2', и я перехватил все изменения позже
this.control.valueChanges
.pipe(
map((name) => {
console.log('fired', name)
return name;
})
)
.subscribe ( v => this.value = v )
шаблон
{{value}}
Почему пример в вопросе с async не работает, асинхронный оператор подпишется на наблюдаемое, но во время асинхронной подписки текущее значение элемента управления будет равно 2, поэтому никаких изменений не произойдет, поэтому первое значение будет не выдается как изменение для элемента управления формы, другая наблюдаемая вещь ленива, поэтому, когда вы подписываетесь, вы получаете значение, что любые изменения до этого не будут видны