Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 父路由与子路由的角度访问方法_Javascript_Angular_Typescript_Routes_Angular Routing - Fatal编程技术网

Javascript 父路由与子路由的角度访问方法

Javascript 父路由与子路由的角度访问方法,javascript,angular,typescript,routes,angular-routing,Javascript,Angular,Typescript,Routes,Angular Routing,为了清楚地解释我的问题,我在应用程序中为每个实体都有一个组件,比如Author组件和Book组件。对于每一个组件,我都有两个子组件,一个是列表组件,一个是表单组件 因此,我的路线配置基本上如下所示: export const routing = RouterModule.forRoot([ { path: 'author', component: AuthorComponent, children: [ { path: 'autho

为了清楚地解释我的问题,我在应用程序中为每个实体都有一个组件,比如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 }
        ]
    }
]);
例如,在my AuthorComponent中,我有一个方法可以删除调用该服务的作者:

deleteBadge = (event): void => {
    // Call delete service
    this._badgeService.delete(event).subscribe(
      result => {
        // Good
      },
      error => {
        // Error
}
我的问题是,在知道不能像使用事件的普通子组件那样调用该方法的情况下,如何从路由子组件(作者列表或表单组件)调用该方法


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

使用一个通信服务,该服务将多个通信观察对象联合起来


可以在官方文档中找到一个示例:

使用一个通信服务,该服务将多个通信观测值联合起来


可以在官方文件中找到一个例子:

标准做法是使用共享服务。但是,如果仍然希望避免使用共享服务,则可以使用

例如,在子组件中,
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');
}

以下是到的链接。

标准做法是使用共享服务来实现。但是,如果仍然希望避免使用共享服务,则可以使用

例如,在子组件中,
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');
}

这里有一个链接。

使用带有可观察对象的共享服务来通知侦听器他们需要对事件做出反应。我觉得这种服务方法真的很难看。。我的意思是,如果我必须向孩子传递一个简单的小信息,我需要为它创建一个全新的服务?如果你认为一项服务很难看,你就不会很享受,那对我来说就不好了@GünterZöchbaueri。这是在同一组件模板中静态地非父/子(或同级)组件之间进行通信的方法。也许你可以有一个通用的通信服务,它将多个通信观察对象联合起来。@MeMeMax我对服务本身没有问题,但老实说,创建一个全新的服务来传递字符串对我来说似乎很难。但是你关于使用通用服务来管理组件之间的通信的想法看起来非常好,你有我的参考资料吗?使用带有可观察对象的共享服务来通知侦听器他们需要对事件做出反应。我觉得这种服务方法真的很难看。。我的意思是,如果我必须向孩子传递一个简单的小信息,我需要为它创建一个全新的服务?如果你认为一项服务很难看,你就不会很享受,那对我来说就不好了@GünterZöchbaueri。这是在同一组件模板中静态地非父/子(或同级)组件之间进行通信的方法。也许你可以有一个通用的通信服务,它将多个通信观察对象联合起来。@MeMeMax我对服务本身没有问题,但老实说,创建一个全新的服务来传递字符串对我来说似乎很难。但是你关于使用通用服务来管理组件之间的通信的想法看起来真的很好,你有参考资料给我吗?啊,这真的很有趣。你知道这样做还是不这样做是一种好的做法吗?正如我在回答中所写,这不是标准做法。这是另一种方式,因为您不想使用共享服务。用@ViewChild()代替它怎么样?我想我们也可以达到同样的结果,但我不确定哪一个更好?啊,那真的很有趣。你知道这样做还是不这样做是一种好的做法吗?正如我在回答中所写,这不是标准做法。这是另一种方式,因为您不想使用共享服务。用@ViewChild()代替它怎么样?我认为我们也可以达到同样的结果,但我不确定哪一个更好?