首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用另一个组件中已经存在的组件的方法

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

Stack Overflow用户
提问于 2019-06-12 15:00:32
回答 2查看 205关注 0票数 2

组件1

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

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

组件2

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

        constructor() { 
        }
    }

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

组件1组件2没有任何父/子关系。

有没有办法在组件2中获取组件1的即时信息?

在java中,类似这样的

代码语言:javascript
复制
MyClass myClass = applicationContext.getBean("myClass");

在没有BehaviorSubjectEventEmitter的情况下,有可能在角度上这样做吗?

EN

回答 2

Stack Overflow用户

发布于 2019-06-12 15:22:17

您可以通过包含组件的父模板将组件A转发到其他组件B。没有可以查询的组件实例存储库。如果不希望使用模板在两者之间进行连接,则必须使用共享服务。

app.component.html:

代码语言:javascript
复制
  <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中将视图标记为脏视图。

我不推荐上面的内容,因为从视图外部突变另一个组件的内部状态是一种反模式。最好使用共享服务和可观察性。

票数 2
EN

Stack Overflow用户

发布于 2019-06-12 15:17:08

我只需创建一个在另一个组件上有句柄的服务,您就可以将该组件的引用点传递给:

代码语言:javascript
复制
import { Component } from '@angular/core';
import { ComponentService } from 'filepathofyourcomponentservice';
@Component({
    selector: 'app-component2',
    template:
    `
    <p>text</p>
    `
})
export class Component2 {
    ViewChild('component) component: Component;

    constructor(private componentService: ComponentService) { 
        this.componentService.tapIntoComponent(this.component);
    }
}
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56565208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档