angular - 如何从指令中观察服务内简单变量的变化?

标签 angular angular2-services angular2-directives angular2-components

我有一个带有data变量的简单服务:

import { Injectable } from '@angular/core';

@Injectable()
export class MyService {

  private _data:number;

  get data(): number {
    return this._data;
  }
  set data(value: number) {
    this._data = value;
  }

}

现在,当有人对我的变量进行设置时,我想从指令中捕获:

this.myService.data = 12345;

我试图通过订阅来做到这一点,但在语法上遗漏了一些内容:

this.myService.data.subscribe(res => console.log(res));

我错过了什么?我应该声明 observabvle 吗?为什么以及在哪里? 我不确定这个问题的正确方法,因为这不是 HTTP 请求,所以更改很简单。

最佳答案

你可以这样实现:

在您的服务中,放置一个 EventEmitter:

dataUpdated : EventEmitter<number> = new EventEmitter();

然后当你设置数据时,在setData末尾添加:

this.dataUpdated.emit(this.data);

它允许通知订阅的组件变量已更改并发送新值(您可以发送任何您想要的值)。

最后,在您的组件中,您可以收到如下通知:

constructor
(
    private service: Service
)

ngOnInit()
{
    this.service.dataUpdated.subscribe
    (
        (data: number) =>
        {
            //setData used, you can use new data if needed
        }
    );
}

关于angular - 如何从指令中观察服务内简单变量的变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43610490/

相关文章:

angular 2 服务订阅仅在第二次单击带有 routerLink(s) 的组件后更新

angular - 如何在 angular4 中读取 APP_INITIALIZER 服务中的查询参数?

javascript - 显示以 Angular 7 隐藏 div

javascript - 如何使用后端保留两个用户表 "synchronized"?

Angular2 ExpressionChangedAfterItHasBeenCheckedError 错误

javascript - 如何通过过滤器显示特定值?

angularjs - 覆盖 primeNg 的 DataTable 组件时模板解析错误

angular - 类型错误 : undefined is not a function when importing two modules in Angular

angular - 双倍绑定(bind) Angular 数组长度的简单方法,其中对象的特定属性为 'true'?

angular - 如何在执行任务之前等待绑定(bind)获取其值