gpt4 book ai didi

javascript - 模板渲染后的 Angular 变化检测

转载 作者:行者123 更新时间:2023-12-03 02:36:59 28 4
gpt4 key购买 nike

因此,我循环遍历 html 中的项目列表,并设置一个调用函数以返回 true 或 false,以便我可以应用相应的类,如果任何项目在中匹配,我也会设置一个变量列表。我将此变量用作另一个元素 *ngIf。现在最初,在模板加载之前,该变量为 false。之后组件初始化并渲染 html。现在,我有一个项目列表循环,我在那里调用一个函数,它将该变量设置为 true,但以 ngIf 为条件的元素不可见。

我认为这是因为当组件完全初始化时变量值为 false,然后当 html 渲染时变量值更改为 true。但是 Angular 无法检测到此更改,因为它已经渲染了该元素,并且也没有获得任何更改事件来监视变量。

这是我的 html

<div *ngIf="someVariable">
some content
</div>

<div *ngFor="let item of items">
<div [ngClass]="{isItemMatched(item) : my-class}"></div>
</div>

这是我的组件

somevariable = false

isItemMatched(item) {
forLoop() {
if(true) {
this.someVariable = true
return true
}
}
}

有什么方法可以让我们可以触发 Angular 变化检测,比如在点击事件或其他事件中,以便 Angular 可以更新 View ?

最佳答案

首先,您使用 ngClass 的方式是错误的。 ngClass 的左侧应该是类名,右侧应该是 bool 值。例如。

<div [ngClass]="{'my-class' : isItemMatched(item)}"></div>

要在值更改时更新 View ,可以使用 ChangeDetectorRef在构造函数中注入(inject)此类,然后使用方法 markForCheck()。此方法更新 View 。

constructor(private cdr: ChangeDetectorRef){
}
someMethod(){
this.someVariable = true; //Value changed.
this.cdr.markForCheck(); //View updated.
}

关于javascript - 模板渲染后的 Angular 变化检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48500464/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com