如何在角度7的组件之间共享值

问题描述 投票:0回答:1

我的angular 7项目中有很多组件。这些组件之间很难共享一个值,但无法正常工作。我在下面提供了我的代码。任何人都知道如何帮助找到解决方案的方法。

文件夹:我的组件:

app ->

   ->power
   ->air
   ->pollution
   ->wind

power.component.ts:

@Output() public globalValue= new EventEmitter();

ngOnInit(){

 this.globalValue.emit('helloworld');

}

air.component.ts:

@Input() globalValue: string;

ngOnInit(){

console.log(this.globalValue); //Output should be helloworld

}

pollution.component.ts:

@Input() globalValue: string;

ngOnInit(){

console.log(this.globalValue); //Output should be helloworld

}

wind.component.ts:

@Input() globalValue: string;

ngOnInit(){

console.log(this.globalValue); //Output should be helloworld

}
angular6 angular7 angular8
1个回答
0
投票

Angular提供了许多我们可以在组件之间共享值的方法。

https://angular.io/guide/component-interaction

但是正如我所看到的,您希望与多个组件共享。您可以创建一个服务,然后任何组件都可以订阅它并获得价值。

import { Injectable } from '@angular/core';
import { Subject }    from 'rxjs';

@Injectable()
export class GlobalService{

  // Observable string sources
  private globalValueSource = new Subject<string>();


  // Observable string streams
  globalValueAnnounced$ = this.globalValueSource.asObservable();

  // Service message commands
  sendGlobalValue(value: string) {
    this.globalValueSource.next(value);
  }

}

在您的任何组件中,您都可以通过订阅它来获得价值,例如:

constructor(private globalService: GlobalService) {
    globalService.globalValueAnnounced$.subscribe(
      value => {
       console.log(value);
      });
  }
© www.soinside.com 2019 - 2024. All rights reserved.