为什么[ngStyle]在页面渲染时被多次调用?
Why [ngStyle] is called many times during page rendering?
我有一个使用 [ngStyle] = "getStyle()"
的 Angular 页面,当我 运行 页面时,似乎 getStyle() 已被调用多次。
谁能解释为什么会发生这种行为?
模板:
<div class="toast" data-autohide="false" [ngStyle]="getStyle()">
<div class="toast-header">
<strong class="mr-auto text-primary">{{comment.username}}</strong>
<small class="text-muted">5 mins ago</small>
</div>
<div class="toast-body">
{{comment.comment}}
</div>
</div>
TS代码:
getStyle(): Object {
this.x = Math.floor((Math.random() * 100));
this.y = Math.floor((Math.random() * 30));
console.log('random process ', this.x, this.y);
return {
left: this.x+'px',
top: this.y+'px'
};
浏览器控制台打印的日志:
如果您使用的是默认更改检测策略,则每个更改检测周期都会调用绑定到属性和指令的函数。插值函数也是如此,例如 {{ getStyle() }}
.
您需要在控制器中 运行 函数一次,将其结果保存在一个变量中,然后将 属性 绑定到它。
控制器
export class SomeComponent {
style: any;
ngOnInit() {
this.style = this.getStyle();
}
getStyle(): Object {
this.x = Math.floor((Math.random() * 100));
this.y = Math.floor((Math.random() * 30));
console.log('random process ', this.x, this.y);
return {
left: this.x + 'px',
top: this.y + 'px'
};
}
}
模板
<div class="toast" data-autohide="false" [ngStyle]="style">
...
</div>
我有一个使用 [ngStyle] = "getStyle()"
的 Angular 页面,当我 运行 页面时,似乎 getStyle() 已被调用多次。
谁能解释为什么会发生这种行为?
模板:
<div class="toast" data-autohide="false" [ngStyle]="getStyle()">
<div class="toast-header">
<strong class="mr-auto text-primary">{{comment.username}}</strong>
<small class="text-muted">5 mins ago</small>
</div>
<div class="toast-body">
{{comment.comment}}
</div>
</div>
TS代码:
getStyle(): Object {
this.x = Math.floor((Math.random() * 100));
this.y = Math.floor((Math.random() * 30));
console.log('random process ', this.x, this.y);
return {
left: this.x+'px',
top: this.y+'px'
};
浏览器控制台打印的日志:
如果您使用的是默认更改检测策略,则每个更改检测周期都会调用绑定到属性和指令的函数。插值函数也是如此,例如 {{ getStyle() }}
.
您需要在控制器中 运行 函数一次,将其结果保存在一个变量中,然后将 属性 绑定到它。
控制器
export class SomeComponent {
style: any;
ngOnInit() {
this.style = this.getStyle();
}
getStyle(): Object {
this.x = Math.floor((Math.random() * 100));
this.y = Math.floor((Math.random() * 30));
console.log('random process ', this.x, this.y);
return {
left: this.x + 'px',
top: this.y + 'px'
};
}
}
模板
<div class="toast" data-autohide="false" [ngStyle]="style">
...
</div>