Angular2:从 parent 组件调用函数

Angular2: Call function from parent component

我遇到了一个问题,这个问题之前已经提到过很多次了,但是这些解决方案是这样的:

为了简单起见,我想在共享 link 上使用这个示例:

让我们开始吧: 首先,我在 app.module.ts:

中有那些路线
{path: 'dash/:project_id', component: DashProject, children: [
    {path: '', component: null},
    {path: 'task/form', component: TaskForm},
    {path: 'task/:task_id', component: TaskView}

如您所见,DashProject 是我的 parent 其他人是 children。我还在 DashProject 的模板中包含了所需的

<router-outlet></router-outlet>

部分包括 children。

但是在这个提到的例子中我需要包括

<child (notifyParent)="getNotification($event)"></child>

现在我在我的 parent 模板中做了这样的:

<child (notifyParent)="getNotification($event)"></child> <router-outlet></router-outlet>

问题:当我将 <child (notifyParent)="getNotification($event)"></child> 添加到我的 parent 模板时,child 组件 已经包含在 parent 中,即使它没有被调用通过 URL routing. 当我删除该部分时, parent-child 之间的交互不再起作用。 如果我将它们添加到 child 模板中,我将得到一个永无止境的循环并崩溃。

谁能看到我的问题或知道是什么导致了这个错误?我在网上看到了一些例子,比如上面分享的那个,都是用类似的解决方案,但对我来说行不通。

提前致谢!

亲切的问候,yadbo

看起来您可能正在合并两种不同的技术。

当你想路由到一个组件时使用路由。例如,路由到 dash 项目页面或任务表单页面。通常路由的组件没有选择器,并且不在 HTML 中直接引用。相反,它们出现在 <router-outlet>.

当您想将一个组件用作另一个组件的子组件时,请使用嵌套组件。例如,在项目页面中显示一组星星而不是评级。嵌套组件必须有一个选择器,并且该选择器在 HTML 中使用(就像您的 <child> 示例。)

当使用嵌套组件时,可以使用@input和@output来实现父子之间的通信。

使用路由组件时,您可以通过传递参数(必需参数、可选参数或查询参数)、使用共享解析器或在服务中设置属性来在组件之间进行通信。

谢谢@DeborahK 的提示,那是我遗漏了。

现在我正在使用共享服务来解决这个问题,我将回调传递给从 child 调用的共享服务。

这是一个例子,至少是想法,它是如何工作的:

export class SharedService {
    private callback:any = null;

    public constructor() {
    }
    public getCallback() {
        return this.callback;
    }

    public setCallback(call) {
        this.callback = call;
    }
}

Parent:

this._shared.setCallback(this.test.bind(this));

Child:

this._shared.getCallback()();

是的,它有效:)