我的目标原则上很简单,但我无法实现它:我希望当一个服务的变量被更改时,我的某个组件能够更新。
为了更好地解释我的问题,这里是一个例子:
在这里,我有一个服务,它会增加或减少一定数量的点数。当它接收到其中一个函数的调用时,会减少或增加这些点数。它还会说明这个变量是否是偶数或奇数。
在这里,我有一个组件,需要知道我的数字是偶数还是奇数。
在初始化时,没有问题!它知道了!
但是,每次我的服务(test.service.ts)中的数字发生更改时,我该如何确保值对/导入在我的组件(test.component.ts)中也随之变化?
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class TestService {
Number: number = 0;
IsOdd: boolean = false;
constructor() {}
IncreaseNumber() {
this.Number = this.Number + 1;
this.IsOdd = !this.IsOdd;
}
DecreaseNumber() {
this.Number = this.Number - 1;
this.IsOdd = !this.IsOdd;
}
}
在这里,我有一个组件,需要知道我的数字是偶数还是奇数。
在初始化时,没有问题!它知道了!
但是,每次我的服务(test.service.ts)中的数字发生更改时,我该如何确保值对/导入在我的组件(test.component.ts)中也随之变化?
import { Component, OnInit } from '@angular/core';
import { TestService } from '../test.service'
@Component({
selector: 'app-test',
templateUrl: './test.component.html',
styleUrls: ['./test.component.scss']
})
export class TestComponent implements OnInit {
IsOdd: boolean = false;
constructor(MyService: TestService) {}
ngOnInit() {
this.IsOdd = MyService.IsOdd;
}
}
我该怎么做?
我的组件是否需要以某种方式subscribe
到我的服务?
或者我是否需要像使用ngOnInit
这样的一个函数来进行更新操作?
提前致谢。
Subject
,并将其作为Observable暴露在你的服务中。然后在你的组件中,你需要订阅你的服务的Observable。接着,在你的服务方法IncreaseNumber
和其他方法中,你需要通过Subject发出一个新值,例如subject.next({val: this.Number, IsOdd : this.IsOdd })
。当你的服务发生任何变化时,你的组件订阅将会得到更新。 - Niladri