0

我无法在角度服务中访问父对象表单激活路由,但它在组件中工作正常。这里有什么方法可以在服务中获得相同的父对象。

import {ActivatedRoute} from '@angular/router'

constructor(private activatedRoute: ActivatedRoute) {}

在组件中:

 onEdit = ({ studentId }) => {
    console.log('parent ', this.activatedRoute.parent)
    // getting parent object
  }

服务中

onEdit = ({ studentId }) => {
        console.log('parent ', this.activatedRoute.parent)
        // getting null
      }
4

1 回答 1

1

正如 MikeOne 所提到的,它不是按设计工作的。服务不知道激活的路由。只有路由到的组件才能通过 ActivatedRoute 段。

但是,您可以订阅服务中的路由事件:

this.router.events
      .filter(event => event instanceof NavigationEnd)
      .map(() => this.activatedRoute)
      .map(route => {
        while (route.firstChild) route = route.firstChild;
        return route;
      })
      .filter(route => route.outlet === 'primary')
      .mergeMap(route => route.data)
      .subscribe((data) => ...);

示例取自https://github.com/angular/angular/issues/15004

阅读本文以获得更详细的解释和替代方法

于 2020-08-10T08:04:35.440 回答