当前位置:  开发笔记 > 前端 > 正文

Angular 2服务中的Observables与变量

如何解决《Angular2服务中的Observables与变量》经验,为你挑选了1个好方法。

我有一个关于在Angular 2服务中使用Observables与变量的问题.前者似乎是首选方式,但我无法确切地找出原因.

给出如下样本服务:

@Injectable()
export class TestService {
    // Method 1
    public data = {x: Math.random(), y: Math.random()};

    // Method 2
    private _data$:BehaviorSubject = new BehaviorSubject({x: Math.random(), y: Math.random()});
    public data$:Observable = this._data$.asObservable();

    constructor() {
        setInterval(() => {
            this.data = {x: Math.random(), y: Math.random()};
            this._data$.next({x: Math.random(), y: Math.random()});
        }, 500);
    }
}

我已经看到了两种消耗组件数据的方法.只是直接使用变量:

{{testService.data | json}}

并使用Observable:

{{(testService.data | async) | json}}

两者似乎都有效,那么使用更精细的基于Observable的方法有什么优势呢?

Plunker:https://plnkr.co/edit/1qVDSZwq2NVgZsWFPnii ? p = preview



1> Günter Zöchb..:

Observable将值更改推送到订阅更改的组件和服务.

变量需要轮询,因此它具有巨大的性能优势.

特别是如果存在计时问题,例如组件需要来自服务从服务器获取的服务的值.组件如何知道可用的值.

使用可观察的组件只需订阅并在值到达时调用.

角度变化检测直接支持可观察量.当ChangeDetectionStrategy.OnPush使用并且视图使用异步管道(

{{myObservable | async}}
)绑定到observable 时,除非observable推送新值,否则根本不会运行更改检测.

可观测量有其他好处.例如,参见https://blog.thoughtram.io/angular/2016/01/06/taking-advantage-of-observables-in-angular2.html

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有