Angular2:在渲染时调用两次的函数

时间:2017-08-10 17:33:02

标签: html angular

我有一个为每次迭代调用的函数。

并且没有预料到,每次迭代都会调用此函数两次。

public setLevel(deviceId: string, averageFps: number): void {
    let device = `device-${deviceId}`;

    // (<HTMLElement>document.querySelector(`#${device} .level-fps-wrapper .level-fps`)).style.width = `${averageFps / 300 * 100}%`;
    console.log(device);
}

这是html模板

<div class="container">
<div class="row">
    <h1 class="header">Devices</h1>
    <div class="col l4 m6 s12 clickable" *ngFor="let device of this.devices" (click)="goToDevice(device)">
        <div class="card" [id]="'device-' + device.device._id">
            <div class="card-content">
                <div class="row no-margin-bottom">
                    <div class="col s2">
                        <img class="circle circle-element" [src]="'./app/devices/images/' + device.device.os + '_logo.png'" alt="">
                    </div>
                    <div class="col s10">
                        <span class="card-title">{{ device.device.name }}</span>
                        <p>
                            {{ device.averageFps | number: '.1-2' }} fps
                        </p>
                    </div>
                </div>
            </div>
            <div class="card-action level-fps-wrapper">
                <div class="level-fps">{{ this.setLevel(device.device._id, device.averageFps) }}</div>
            </div>
        </div>
    </div>
</div>

这是输出

This is the output

它应该是3行而不是6行。

有人可以向我解释一下吗?是否与角度生命周期钩子有关?

感谢您的回答!

1 个答案:

答案 0 :(得分:0)

是的,这很常见。类似于角度1,角度无法判断函数的结果是否会发生变化,因此它会在每个摘要循环中调用它。