angular - 在另一个组件中调用已经存在的组件的方法

标签 angular typescript

组件 1

import { Component } from '@angular/core';
@Component({
    selector: 'app-component1',
    template:
    `
    <button (click)="submit()"></button>
    `
})
export class Component {

    constructor() { 
    }
    someMethod(): void {
    }
}

组件 2

import { Component } from '@angular/core';
    @Component({
        selector: 'app-component2',
        template:
        `
        <p>text</p>
        `
    })
    export class Component2 {

        constructor() { 
        }
    }

我想从组件2调用组件1 someMethod()

component 1 and component 2 haven't any parent/child relation.

有没有办法在组件2中获取组件1的瞬间

在java中是这样的

MyClass myClass = applicationContext.getBean("myClass");

在没有 BehaviorSubjectEventEmitter 的情况下,是否有任何可能的方式?

最佳答案

您可以通过包含它们的父模板将组件 A 转发到另一个组件 B。没有您可以查询的组件实例存储库。如果您不想使用模板连接两者,则必须改用共享服务。

应用程序组件.html:

  <component-a #refA></component-a>
  <component-b [refA]="refA"></component-b>

  @Component({...})
  export class ComponentA {
      public someMethod() { }
  }

  @Component({...})
  export class ComponentB implement OnInit {
      @Input() refA: ComponentA;

      public ngOnInit() {
          if(this.refA) {
             this.refA.someMethod();
          }
      }
  }

以上都有缺点。

  • 您可以触发一个此表达式在检查后已更改错误。
  • 如果您在外部更改组件状态表单,则需要将 ComponentA 中的 View 标记为脏。

我不推荐上述方法,因为从 View 外部改变另一个组件的内部状态是一种反模式。最好使用共享服务和可观察对象。

关于angular - 在另一个组件中调用已经存在的组件的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56565208/

相关文章:

angular - 任何人都经历过 angular2 加载速度慢的情况

typescript - 使用本地声明文件在 TypeScript 中导入 webpack 外部包

javascript - 通过 Typescript 类扩展 JavaScript 对象原型(prototype)

typescript - 强制 Typescript 通用参数(a : T, B: T)为相同类型

javascript - 无法读取未定义的属性 'cnt'

angular - 子组件的 NGRX 和状态管理

http - 使用参数动态加载页面(Ionic 2 + Angular 2)

TypeScript 泛型 : 'type is not assignable to type T'

javascript - 接口(interface)上类型 'string' 的索引签名无法识别( typescript )

angular - TypeError : webpack. CopyWebpackPlugin 不是构造函数