在Angular中,当我们通过服务传递对象时,如果我们在组件中修改了这个对象的属性,但是在其他组件中该对象的属性没有发生变化,可能是因为我们没有正确的使用服务来传递对象。下面是一个示例代码,演示了如何通过服务传递对象并确保数据的正确更新。
首先,我们创建一个名为data.service.ts
的服务,用于提供一个可观察的对象:
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class DataService {
private dataSubject = new BehaviorSubject({});
setData(data: any) {
this.dataSubject.next(data);
}
getData() {
return this.dataSubject.asObservable();
}
}
然后,在发送数据的组件中,我们使用setData()
方法将数据发送到服务中:
import { Component } from '@angular/core';
import { DataService } from './data.service';
@Component({
selector: 'app-sender',
template: `
`
})
export class SenderComponent {
constructor(private dataService: DataService) {}
sendData() {
const data = { name: 'John', age: 30 };
this.dataService.setData(data);
}
}
接下来,在接收数据的组件中,我们使用getData()
方法来订阅来自服务的数据,并在回调函数中更新组件的属性:
import { Component, OnInit } from '@angular/core';
import { DataService } from './data.service';
@Component({
selector: 'app-receiver',
template: `
{{ name }}
`
})
export class ReceiverComponent implements OnInit {
name: string;
constructor(private dataService: DataService) {}
ngOnInit() {
this.dataService.getData().subscribe(data => {
this.name = data.name;
});
}
}
通过这种方式,当我们点击“发送数据”按钮时,数据将通过服务传递给接收数据的组件,并且在接收组件中的name
属性将被更新为'John'
。