加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular 2服务中的Observables与变量

发布时间:2020-12-17 17:54:36 所属栏目:安全 来源:网络整理
导读:我有一个关于在Angular 2服务中使用Observables与变量的问题.前者似乎是首选方式,但我无法确切地找出原因. 给出如下样本服务: @Injectable()export class TestService { // Method 1 public data = {x: Math.random(),y: Math.random()}; // Method 2 priva
我有一个关于在Angular 2服务中使用Observables与变量的问题.前者似乎是首选方式,但我无法确切地找出原因.

给出如下样本服务:

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

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

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

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

<pre>{{testService.data | json}}</pre>

并使用Observable:

<pre>{{(testService.data | async) | json}}</pre>

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

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

解决方法

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

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

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

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

角度变化检测直接支持可观察量.
当使用ChangeDetectionStrategy.OnPush并且视图使用异步管道(< div> {{myObservable | async}}< / div>)绑定到observable时,除非有新值,否则不会运行更改检测由观察者推动.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读