Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 将值从服务发送到另一个组件_Angular_Typescript - Fatal编程技术网

Angular 将值从服务发送到另一个组件

Angular 将值从服务发送到另一个组件,angular,typescript,Angular,Typescript,我有一个设置ID的服务,我在点击事件中从另一个组件获得这个ID export class MyService { id: number; constructor() {} public setId(value: number) { this.id = value; console.log('id:', this.id); } } 在我的菜单组件中的单击事件上设置值: <a [routerLink]="['item.id]

我有一个设置ID的服务,我在点击事件中从另一个组件获得这个ID

export class MyService {

   id: number;
   constructor() {}

   public setId(value: number) {
          this.id = value;
          console.log('id:', this.id);
   }
}
在我的菜单组件中的单击事件上设置值:

<a [routerLink]="['item.id]" (click)="getId(item.id);">
getId(datavalue: number) 
      {
            this.ms.setId(datavalue);
      }
id: number;
ngOnInit()
   {
    this.ms.idUpdated.subscribe(
        (id) => {
          this.id = this.ms.getId();
          console.log(this.id);
        }
      );
   }
如何将相同的值发送到另一个组件,以便在HTML中显示它

class MyComponent implements OnInit
{
   id: number;

   constructor(private ms: MyService)
    {
       this.id = ms.id;
       console.log('ms id = ', this.id);
    }

我在上面的例子中尝试过,但是控制台日志中出现了“未定义”

编辑:不要在服务中使用EventEmitter,这只是一个快速解决方法! 这篇文章涵盖了你的所有需求:

您可以在服务中使用EventEmitter

然后订阅详细信息组件中属性的更改:

<a [routerLink]="['item.id]" (click)="getId(item.id);">
getId(datavalue: number) 
      {
            this.ms.setId(datavalue);
      }
id: number;
ngOnInit()
   {
    this.ms.idUpdated.subscribe(
        (id) => {
          this.id = this.ms.getId();
          console.log(this.id);
        }
      );
   }

那么你是在哪里设置ID的呢?请给出一个。只需执行
此操作。_ms.setId(this.id)
@jornsharpe哦,对不起,我添加了获取值的位置。如果在构建组件后发生这种情况,您为什么希望它被更新?日志应该向您显示事件发生的顺序。每个EventEmitter用于“由指令和组件”使用。撰写服务时,应使用常规主题和可观察对象。此外,将发射器/主体公开是不明智的;允许从服务外部将值推送到流中。我写了一些关于这个模式的文章:@jornsharpe我被纠正了。编辑了我的答案,并将尽快更新代码。