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

标签 javascript html angular render angular-components

因此,我循环遍历 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/

相关文章:

html - CSS 被多个文件覆盖

Angular httpClient 将响应映射到具有行为的实体

javascript - 元素在第一次单击时发生更改,但在第二次单击时不会恢复

html - 为什么我的元素之间有间距? ...以及其他 CSS 问题

html - 如何在另一个图像中显示图像

html - fromEvent 返回属性在类型 'Event' 上不存在

angular - 年度股东大会 map |仅在绘制的多边形中添加标记

javascript - 如何针对 IE 进行优化?

javascript - 将键码写入控制台。反复

javascript - 在发送电子邮件之前在 Firestore 函数中合并 Firebase Firestore 查询结果