我一直在阅读angular.io指南并遇到the section on the NgClass directive。 在提供的示例中,ngClass的源是组件函数:
// HTML
<div [ngClass]="setClasses()">This div is saveable and special</div>
// Controller
setClasses() {
let classes = {
saveable: this.canSave, // true
modified: !this.isUnchanged, // false
special: this.isSpecial, // true
};
return classes;
}
考虑到这在摘要周期中是否会产生很大的开销 该指令不知道函数的结果何时发生了变化 会在每个摘要周期中触发对功能的新评估吗?在 对比我希望以下代码提供相同的功能 但只能在其中一个观测值具体时重新评估 改变了(canSave,isUnchanged,isSpecial)。
<div [ngClass]="{ saveable : canSave, modified : !isUnchanged, special: isSpecial }">This div is saveable and special</div>
有人可以说明我应该考虑的内容 优化表现?一个示例用例是将此ngClass打开 一个在可见页面上创建~200个元素的ngRepeat。
作为一个侧面节点和较小的问题,我想知道是否有任何好处 学习一次性绑定的资源(在angular2与angular1中)。该 指南似乎没有涵盖这一点,我希望有一个异步的 时间绑定在angular2中可用。
答案 0 :(得分:2)
这是否会在摘要周期中产生很大的开销,因为该指令不知道函数的结果何时发生了变化,并且会在每个摘要周期中触发对函数的新评估?相反,我希望以下代码提供相同的功能,但只在其中一个观察值发生变化时才进行重新评估(canSave,isUnchanged,isSpecial)。
你的结论是正确的。
setClasses
方法为每个调用返回一个不同的实例,这使ngClass
中的比较更加昂贵。如果没有依赖项更改,则返回相同的实例,然后绑定到此方法
方式很好。
最近这个问题已得到解决。 https://github.com/angular/angular.io/issues/3072
作为一个侧面节点和较小的问题,我想知道是否有任何好的资源来学习一次性绑定(在angular2与angular1中)。该指南似乎没有涵盖这一点,我希望在angular2中有一个异步的一次性绑定。
Angular2不支持一次性绑定。