在同级组件之间共享数据(无法正常工作)

时间:2020-08-23 09:16:25

标签: angular typescript components

我正在尝试将数据从一个同级组件发送到另一个同级组件,但是它没有按预期工作

下面是service.ts文件

private _testIdSource = new Subject<number>();
  test_id = this._testIdSource.asObservable();

  sendTestId(test_id : number){
    console.log(test_id);//showing data
    this._testIdSource.next(test_id);
  }

此组件将表单中的输入作为id

addQuestions(test_id:number){
    console.log(test_id);//showing data
    
    this.service.sendTestId(test_id); 
    this.router.navigate(['/editTest']);    
    
  }

该组件应该接收数据并将其初始化为全局变量testId,但是我很难将全局变量的值设置为接收到的数据

ngOnInit() {
    this.service.test_id
      .subscribe(
        message=> {
          if(message != null){
            this.testId = message;
            console.log('test_id value received -> '+this.testId);//showing data
          }else{
            console.log('null value received');
          }
        }
      );
      console.log(this.testId);//says undefined
      
  }

请帮助

1 个答案:

答案 0 :(得分:2)

您可以使用简单的TypeScript Setter and Getter而不是Observable(必须取消订阅,以防止内存泄漏)将值传递给同级组件。

service.ts

test_id: number;

get testId(): string {
  return this.test_id;
}

set testId(id): string {
  this.test_id = id;
}

通过组件设置ID

addQuestions(test_id: number) {
  this.service.testId = test_id; 
}

最终获得价值

ngOnInit() {
 const testId = this.service.testId
 console.log(testId);
}

希望此地址能解决您的问题。