我正在尝试使用服务在组件之间共享数据。
在project
组件中,按钮上有一个点击事件
<button type="submit" (click)="newValue()" class="btn btn-warning btn-sm mt-2">Create task</button>
应该发出一个字符串值
newValue() {
this.shareService.changeValues("Hello from project");
}
在服务中我试图在observable
BehaviorSubject
private selectedValue = new BehaviorSubject<string>("");
currentValue = this.selectedValue.asObservable();
Task
组件已订阅,但值未更新。
答案 0 :(得分:0)
在.next
BehaviorSubject
中,当您调用BehaviorSubject
方法时,您需要changeValues
进行服务。
请参考以下代码
在ShareService
changeValues(value: string) {
this.selectedValue.next(value);
}
更好的方法是返回我们可以订阅的Observable
获取值。
@Injectable()
export class ShareService{
selectedValue = new BehaviorSubject<string>("");
getSelectedValue$() {
return this.selectedValue.asObservable();
}
changeValues(value: string) {
this.selectedValue.next(value);
}
}
如果我们需要SelectedValue
,我们会将此Service
和subscribe
注释到Observable
方法中的getSelectedValue$
。
在Task
组件
export class TaskComponent implements OnInit {
constructor(
public ShareService: ShareService) {
}
ngOnInit(): void {
this.ShareService.getSelectedValue$().subscribe((selectedValue)=> {
// use selectedValue here
})
}
}