Angular:如何从不同模块中的另一个组件调用组件方法

Angular:如何从不同模块中的另一个组件调用组件方法,angular,Angular,我正在尝试从B_模块拥有的B_组件调用a_模块拥有的a_组件的方法,并且在我将a_组件作为参数添加到B_组件构造函数后,立即出现以下错误: NullInjectorError:没有\u组件的提供程序 编辑:这两个组件不是父/子组件。他们的模块由app.module导入 (为简洁起见,对代码进行了总结) A_模块: import { A_Component } from '...' @NgModule({ imports: [...], declarations: [A_Comp

我正在尝试从B_模块拥有的B_组件调用a_模块拥有的a_组件的方法,并且在我将a_组件作为参数添加到B_组件构造函数后,立即出现以下错误:

NullInjectorError:没有\u组件的提供程序

编辑:这两个组件不是父/子组件。他们的模块由app.module导入

(为简洁起见,对代码进行了总结)

A_模块:

import { A_Component } from '...'

@NgModule({
    imports: [...],
    declarations: [A_Component],
    exports: [A_Component],
})

export class A_Module { }
B_模块:

import { A_Module } from '...'
import { B_Component } from '...'

@NgModule({
    imports: [A_Module],
    declarations: [B_Component]
})

export class B_Module { }
A_组成部分:

export class A_Component {
    someMethod() {...}
}
import { A_Component } from '...'

export class B_Component {

    constructor(public a_Component: A_Component)) {} //this param causes error

    callSomeMethod() {
        this.a_Component.someMethod();
    }
}
B_部分:

export class A_Component {
    someMethod() {...}
}
import { A_Component } from '...'

export class B_Component {

    constructor(public a_Component: A_Component)) {} //this param causes error

    callSomeMethod() {
        this.a_Component.someMethod();
    }
}
这不是如何跨模块调用组件方法吗?只有通过服务才能做到这一点吗?

请参阅官方文档

您只能使用调用在组件内部声明的组件的方法

如果您想使两个不同的组件相互作用,那么应该这样做


在@diopside

中的点后更新a_组件在使用B组件的视图/模板中是B组件的父级吗?好的,如果您将一个组件注入到另一个组件中,那么角度注入器将通过从子组件被实例化的点向上移动DOM树来查找另一个组件。换句话说,它将看到A_组件是否是B组件的父组件,如果不是,它将看到它是否是其父组件的父组件,依此类推。如果他们在您的视图(DOM)中没有这样的关系,它将不知道如何注入它。在使用组件的地方共享代码@透辉石这两种组分不是父子体。这两个模块都由app.module导入。你是对的,我在构造函数中注入组件的唯一其他时间是当组件是子组件的父组件时。我想我也可以用非父/子组件来实现这一点。是的,不幸的是,文档没有明确说明Angular的这一部分。@Alex Angular的方式是共享服务。这是制作每个组件和独立项的要点,也是编译时优化的一部分。因为这个问题有点关于模块交互。有一篇很酷的文章可以让你更好地理解模块的作用域——它们当然可以,并且是Angular最有用的特性之一!这里有一个简单的例子说明它有多强大/有用-@diopside你是对的。我不知道这种方法。然而,对我来说,这看起来有点“颠倒了”()。或者看起来更自然。很多人不喜欢,我很长一段时间都不喜欢。我把责任归咎于蹩脚的角度文档。对于某些用例,它绝对是最优雅和简单的方法。我经常在单亲包含许多相同的相关子组件(如选项卡、列表和其他内容)的情况下使用它。除了直接的父->子关系之外,任何其他关系都可能变得混乱