为什么事件侦听器调用子组件的* ngIf方法?

时间:2019-03-23 19:50:00

标签: angular angular-template

请查看以下代码

<div id="safetyDiv" (scroll)="onScrollSafety()">
  <ul>
    <li *ngFor="let message of messages; let i = index;">
      <div *ngIf="foo()">{{message}}</div>
    </li>
  </ul>
</div>

为什么滚动safetyDiv调用foo()?我猜它与变更检测有关。出于测试目的,我删除了滚动事件侦听器,然后在滚动时未调用foo()。但是,就我而言,需要通知滚动事件。 因此,有没有一种方法可以让我监听滚动事件而无需始终调用foo()

您还可以查看我创建的堆栈闪电,其中显示了所描述的行为:https://stackblitz.com/edit/angular-rotj54

1 个答案:

答案 0 :(得分:0)

通常,如果您遍历对象数组

messages.forEach(x=>x.foo=this.foo(x))
//and use <div *ngIf="message.foo">

如果是字符串或数字数组,请使用辅助变量

foos=messages.map(x=>this.foo(x))
//and use <div *ngIf="foos[i]>