如何从指令中观察服务内简单变量的变化?
How to watch from directive on a simple variable changes inside a service?
我有一个带有 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));
我错过了什么?我应该声明可观察性吗?为什么和在哪里?
我不确定这个问题是否正确,因为这不是 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
}
);
}
我有一个带有 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));
我错过了什么?我应该声明可观察性吗?为什么和在哪里? 我不确定这个问题是否正确,因为这不是 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
}
);
}