来自子路由的父路由的角度访问方法

时间:2017-08-31 08:48:55

标签: javascript angular typescript routes angular-routing

因此,为了清楚地解释我的问题,我的应用程序中的每个实体都有一个组件,如Author组件和Book组件。对于他们每个人,我将有两个孩子,它是一个列表组件和一个表单组件。

所以基本上我的路线配置如下:

export const routing = RouterModule.forRoot([
    {
        path: 'author', component: AuthorComponent,
        children: [
            { path: 'author-list', component: AuthorListComponent },
            { path: 'author-form', component: AuthorFormComponent }
        ]
    },
    {
        path: 'book', component: BookComponent,
        children: [
            { path: 'book-list', component: BookListComponent },
            { path: 'book-form', component: BookFormComponent }
        ]
    }
]);

在我的AuthorComponent中,我有一个删除调用该服务的作者的方法:

deleteBadge = (event): void => {
    // Call delete service
    this._badgeService.delete(event).subscribe(
      result => {
        // Good
      },
      error => {
        // Error
}

我的问题是如何从我的路由子(作者列表或表单组件)中调用该方法,因为我知道我不能使用事件将其称为普通子组件。

PS:我将方法(以及许多其他方法)放在父级中,因为我需要在两个子组件中访问它,以避免冗余。

2 个答案:

答案 0 :(得分:1)

标准做法是为Component Interaction使用共享服务。但是,如果您仍想避免使用共享服务,则可以使用Injector API

例如,在您的子组件AuthorListComponent中,执行以下操作:

import { Injector } from '@angular/core';
import {AuthorComponent} from "./author.component";
// ....

constructor(private injector:Injector){
    let parentComponent = this.injector.get(AuthorComponent);
    parentComponent.deleteBadge('String passed from AuthorListComponent');
}

以下是指向working demo的链接。

答案 1 :(得分:0)

使用通信服务,它将多个通信可观察量结合在一起。

可以在Angular官方文档中找到一个示例:https://angular.io/guide/component-interaction#parent-and-children-communicate-via-a-service