Angular2版本的淘汰赛的计算可观察量

Gab*_*ary 4 javascript knockout.js computed-observable angular

我目前正在努力将我从Knockout编写的一些代码移植到Angular2.我真的很喜欢knockout中计算的observables的构造,这意味着只有当obeservable依赖于变化时才计算该函数的结果.

我知道我可以在角度中使用一个函数,它只会在结果发生变化时更新视图(即使它会多次计算结果),但我的计算机正在进行排序,这就是为什么我只想要完成工作当输入实际改变时.

我发现下面的链接解释了如何使用angularjs,但我不知道如何将其转换为angular2(typescript)

http://www.jomendez.com/2015/02/06/knockoutjs-computed-equivalent-angularjs/ KO.Angular/Breeze Initializer中的计算等效项

TGH*_*TGH 8

如果你使用的是TypeScript,我会考虑使用getter.您还可以使Component使用ChangeDetectionStrategy.OnPush来确保仅在其中一个属性发生更改时才评估绑定.这是一个Plunker:https://plnkr.co/edit/PjcgmFCDj8UvBR7wRJs2 p = preview

import {Component,ChangeDetectionStrategy} from 'angular2/core'

@Component({
  selector:'person',
  template:`<div>
              <div>
                  First Name
                  <input [(ngModel)]="firstName">
              </div>
              <div>
                  Last Name
                  <input [(ngModel)]="lastName">
              </div>

              {{fullName}}
          </div>`,
  changeDetection: ChangeDetectionStrategy.OnPush
})
export class Person{
  firstName = '';
  lastName = '';

  get fullName(){
    return this.firstName + ' ' + this.lastName;
  } 
}
Run Code Online (Sandbox Code Playgroud)

  • 这并不能确保函数的内容只有在其中一个输入发生变化时才是计算机.如果getter函数正在进行某种计算密集型工作(比如对大量对象进行排序),那么这将继续是低效的. - 你可以在提供的plunkr中看到这一点. (2认同)