【发布时间】:2019-04-22 00:14:30
【问题描述】:
我的目标原则上很简单,但我不能把它落实到位:我希望我的一个组件在服务的变量发生变化时更新。
为了更好地解释我的问题,这里是一个例子:
在这里,我有一个增加或减少点数的服务。 当它收到对其功能之一的调用时,它会减少或增加这个点数。 它还说明了这个变量是偶数还是奇数
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 之类的功能但要进行更新?
提前致谢
【问题讨论】:
-
组件“需要知道”的目的是什么?是否需要通知您进行一些额外的处理,还是只需要更新视图?
-
你怎么知道它不起作用?表示您实施了什么来测试您的服务方法?
-
您需要在您的服务中使用来自 rxjs 的
Subject并将其公开为您的服务中的 Observable。然后在您的组件中,您需要订阅该服务的 Observable。然后,您需要在服务方法IncreaseNumber和其他方法中通过主题(如subject.next({val: this.Number, IsOdd : this.IsOdd }))发出一个新值。当您的服务发生任何变化时,您将在组件订阅中获得更新。 -
首先,感谢主题,我会看看这个。他需要进行附加处理 再次,我把这个例子尽可能简单。我的真实案例更加复杂和混乱。使用一个简单而琐碎的例子可以让人们更容易地回答,而其他人和我有同样问题的人,可以更好地理解答案。我知道这个例子不起作用,因为没有什么让他更新
标签: angular typescript service components