【发布时间】:2023-03-11 06:00:01
【问题描述】:
所以我循环遍历我的 html 中的项目列表并设置调用函数以返回 true 或 false,以便我可以应用相应的类,如果任何项目匹配,我也会设置一个变量名单。 我将这个变量用于另一个元素作为 *ngIf。现在最初,在模板加载之前,这个变量是假的。之后,组件初始化并呈现 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
}
}
}
有什么方法可以让我们触发角度变化检测,比如在点击事件或某些事情中,以便角度可以更新视图?
【问题讨论】:
-
从视图绑定调用函数(当然事件处理程序除外)是非常糟糕的做法,并且在几乎所有情况下都不是您想要的。为每个项目准备一个包含数据和预先计算的
isItemMatched结果的数组,并在视图中绑定到该数组。 -
你搞错了。在 Angular 中,您不需要迭代 HTML。您迭代生成 HTML 的 数据。更改您的数据,然后在
*ngFor循环中,根据您迭代的数据添加一个元素是否必须呈现的条件。 -
谢谢大家,是的,我也认为这是一种不好的做法
标签: javascript html angular render angular-components