Angular 组件 属性 函数发出输出事件时视图未更新

Angular component property view not updating when function emits output event

Angular 如果组件方法生成输出事件,组件变量不会在视图中更新。焦点变量是 'qMode'、

生成输出事件的函数(不更新变量)

save() {
    if (this.questionForm.valid) {
        this.question.type = this.questionForm.value.type;
        this.question.description = this.questionForm.value.description;

        this.qMode = 'view';

        this.saveQuestion.emit({
            index: this.index,
            question: this.questionForm.value,
        });
    }
}

不生成输出事件的函数(更新变量)

save() {
    if (this.questionForm.valid) {
        this.question.type = this.questionForm.value.type;
        this.question.description = this.questionForm.value.description;
        this.qMode = 'view';
    }
}

请在此处查找代码 Demo

当您在 saveQuestion 上调用 emit 时,这会触发父组件更新问题列表。

由于您没有设置按值跟踪,因此会重新呈现列表。在问题组件onInit中,值改回'edit'.

您可以通过在列表中按功能添加曲目来解决此问题。这确保组件仅在发生更改时才重新呈现。

在应用程序中-component.html

<div *ngFor="let question of questions; let i = index; trackBy: trackQuestion">

在应用程序中-component.ts

trackQuestion(index: number, question) {
    return index.toString();
    // you can implement custom logic here using the question
}

您可以在此处找到一个 stackblitz 示例:https://stackblitz.com/edit/angular-fdshce