使用服务的组件之间的角度共享数据

时间:2018-05-02 13:46:21

标签: angular angular-services angular-components

我正在尝试使用服务在组件之间共享数据。 在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组件已订阅,但值未更新。

stackblitz

1 个答案:

答案 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,我们会将此Servicesubscribe注释到Observable方法中的getSelectedValue$。 在Task组件

export class TaskComponent implements OnInit {
   constructor(
       public ShareService: ShareService) {
   }
   ngOnInit(): void {
    this.ShareService.getSelectedValue$().subscribe((selectedValue)=> {
        // use selectedValue here
    })
  }
}