Пример минимального Stackblitz
https://stackblitz.com/edit/angular-mqqvz1
В приложении Angular 7 я создал простой компонент с полем <input>
.
Когда я изменяю значение ввода с клавиатуры, я хочу, чтобы значение форматировалось как onBlur. - В минимальном примере я просто хочу добавить к нему строку "EDIT".
Это в основном работает:
- Если я ввожу «тест» и размываю поле, оно будет изменено на «тестовый РЕДАКТИРОВАТЬ».
- Если я наберу «лала» и размываю поле, оно будет изменено на «лала РЕДАКТИРОВАТЬ»
Однако когда я ввожу «тест» - размытие (работает) и снова набираю «тест», это больше не работает!
Вызывается onInputUpdate()
-функция (вы можете увидеть это в журнале консоли), переменная inputValue
обновляется (вы можете видеть это в компоненте {{inputValue}}
), Однако входное значение не меняется! I ожидайте, что это будет «тестовый РЕДАКТИРОВАТЬ», но он останется «тестовым».
Когда я набираю другую строку, она работает, однако ввод одной и той же строки 2 раза подряд не работает. Это почему? Как я могу это исправить?
component.html
{{inputValue}} <br />
<input type="text"
[ngModel]="inputValue"
(ngModelChange)="onInputUpdate($event)"
[ngModelOptions]="{ updateOn: 'blur' }"/>
component.ts
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css'],
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class AppComponent {
inputValue = "teststring";
constructor(
private changeDetectorRef: ChangeDetectorRef,
) {}
public ngOnInit() {
this.inputValue = "initial";
}
public onInputUpdate(inputValue: string) {
this.inputValue = inputValue + ' EDIT';
this.changeDetectorRef.markForCheck();
console.log('onInputUpdate new inputValue', this.inputValue)
}
}
updateOn
отличного от значения по умолчаниюchange
? - person Chris W.   schedule 08.01.2019