这个问题通常由于Angualr中的依赖注入导致。在组件中注入的service实例不会随着service中变量的更新而更新。为了解决这个问题,可以使用Subject和Observable来让service感知到变量值的更新,并将变量值推送给所有使用它的组件。
下面是一个示例代码:
// service.ts import { Injectable } from '@angular/core'; import { Subject } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class DataService {
private dataSubject = new Subject
private data = { name: 'initial name' };
updateName(name: string) { this.data.name = name; this.dataSubject.next(this.data); } }
// component1.ts import { Component } from '@angular/core'; import { DataService } from './data.service';
@Component({
selector: 'app-component1',
template:
})
export class Compnent1 {
name: string;Hello {{ name }}
constructor(private dataService: DataService) { this.dataService.data$.subscribe(data => { this.name = data.name; }); }
updateName() { this.dataService.updateName('new name'); } }
// component2.ts import { Component } from '@angular/core'; import { DataService } from './data.service';
@Component({
selector: 'app-component2',
template:
})
export class Component2 {
name: string;Hello {{ name }}
constructor(private dataService: DataService) { this.dataService.data$.subscribe(data => { this.name = data.name; }); } }
在这个示例中,我们使用了Subject来创建一个可观察对象data$,并在updateName方法中使用next推送更新过的data变量。然后,在组件中通过订阅data$来获取更新数据。这样,当service中的数据更新时,