【问题标题】:How to emit router event如何发出路由器事件
【发布时间】:2018-07-06 13:14:57
【问题描述】:

我有 2 个模块,一个是 sidenav,我可以在其中选择菜单并希望在 content module 中显示组件,其中有 router-outlet。我想知道最好的方法是什么?有一些router event 我可以在内容模块中使用subscribe 吗?因为我将使用serviceemit 组件和subscribe event in router-outlet 组件,但我想这不是最佳实践。类似的东西:

Service:
private emit = EventEmitter<string>
emit(component: string): void {
 this.emit.emit(component)
}

在组件中,我只需订阅service emit 并使用router.navigaterouter-outlet 中显示组件。希望有人可以帮助我=)。谢谢

【问题讨论】:

    标签: javascript angular router eventemitter router-outlet


    【解决方案1】:

    如果我没听错的话:

    Sidenav

    @Output() navigate: EventEmitter<string[]> = new EventEmitter();
    
    emit (route: string[]) {
      this.navigate.emit(route);
    }
    

    sidenav 的父级

    <app-sidenav (navigate)="router.navigate($event)"></app-sidenav>
    

    记得在父组件中公开路由器:

    constructor(public router: Router) {}
    

    【讨论】:

      【解决方案2】:

      子组件 HTML

      <app-child
      [formGroup]="formChild"
      (navigate)="onNavigate($event)"
      ></app-child>
      

      TS

      @Output() navigate: EventEmitter<string[]> = new EventEmitter();
        route = ['yourUrl'];
      
      
        onNavigate(route: string[]) {
          this.route = route;
          this.navigate.emit(route);
          //console.log(route);
        }
      

      父组件

      goBack(){
          this.router.navigate(['yourRoute']);
        }
      

      希望对您有所帮助!

      【讨论】:

        猜你喜欢
        • 2016-11-18
        • 1970-01-01
        • 2013-07-27
        • 2012-06-26
        • 2017-01-01
        • 2017-05-19
        • 2017-12-06
        • 1970-01-01
        • 2016-09-06
        相关资源
        最近更新 更多