Angular 在 Component1 上执行从 component2 触发的方法(不相关的组件)

Angular execute a method on Component1 triggered from component2 (unrelated comps)

我有 2 个组件。

组件 1 和组件 2

在组件 1 中,我有一个由用户触发的方法

<div (click)="trigger('parameter here')">run trigger</div>

然后在 .ts 上:

trigger(param) {
    // Code to "param" to send to Component2 and run executeThis()
}

在component2中我还有一个方法:

executeThis(param) {
    console.log(param);
}

这 2 个组件不相关。

我该怎么做?

您必须将 component2 注入到 component1 中。那么你的触发函数就变成了

trigger(param) {
  this.component2.executeThis(param);
}

Component2 实际上是一个服务。 参见 https://angular.io/guide/dependency-injection#injecting-services

如果 component2 确实是一个组件(即 html),我会将两个组件使用的代码移动到共享服务中。

您可以为此使用服务。
在服务中声明一个新的 EventEmitter:

export class TriggerService
{
  public trigger = new EventEmitter<any>();
}

然后在您的 component1 中发出这样的事件:

trigger(param)
{
  this.triggerService.trigger.emit(param);
}

并在您的组件 2 中订阅 EventEmitter:

constructor()
{
   this.triggerService.trigger.subscribe(param => {
     this.param = param;
     this.executeThis();
   });
}

并在 executeThis 中记录参数:

executeThis()
{
  console.log(this.param);
}

您可以通过创建共享服务并使用 typescript 访问器来实现此目的 setter getter

shared.service.ts

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

@Injectable({
 providedIn: 'root'
})
export class SharedService {
sharedValue;

constructor() {}

set someValue(value) {
  this.sharedValue = value
 } 

get someValue() {
  return this.sharedValue
 }
}

分量 1 设定值

constructor(private service: SharedService) {} // inject service

 trigger(param) {
 // set value
 this.service.someValue = param
}

组件 2 获取值

constructor(private service: SharedService) {} // inject service

executeThis() {
  // get value
  console.log(this.service.someValue);
}