Angular 6 ActivatedRoute网址

时间:2018-11-06 11:25:46

标签: angular

在这里,我有MyComponent,其中的路由器根据路由加载了其他不同的组件,我想在标头组件中获取完整的当前路由,但是ActivatedRoute.url仅显示{path:“ d”}而不是完整路径,或者路径的最后一部分(我需要)。 您是否有关于如何获取已加载路由的标头组件的想法?

my-component.component.html

<app-header></app-header>
<router-outlet></router-outlet>

header.component.ts

 ...
constructor(private route: ActivatedRoute) {}
ngOnInit() {
    this.route.url.subscribe(url=>console.log(url));
}

my-module-routing.module.ts

    {
    path: 'd',
    component: MyComponent,
    children: [
        {
            path: 'discover',
            component: DiscoverComponent
        },
        {
            path: 'book/:id',
            component: BookPageComponent
        },
        {
            path: 'search',
            component: SearchPageComponent
        }]
    }

在d / search console.logs上

[UrlSegment]
0: UrlSegment
parameterMap: ParamsAsMap
parameters: {}
path: "d"
__proto__: Object
length: 1
__proto__: Array(0)

3 个答案:

答案 0 :(得分:0)

这是因为URL是在导航事件上构造的字符串。

我建议您听导航事件,然后将结果映射到当前URL。

This stackblitz解释了如何做到这一点。

import { Component } from '@angular/core';
import { Router } from '@angular/router';
import { map } from 'rxjs/operators';

@Component({
  selector: 'my-app',
  template: `
  <div class="container">
    <a routerLinkActive="active" 
      routerLink="/login">Login</a> |

    <a routerLinkActive="active" 
      routerLink="/home">Home</a> | 

    <a routerLinkActive="active" 
      routerLink="/catalog">Catalog</a> 

    <router-outlet></router-outlet>
  </div>
  <div>
    Current route : {{ url$ | async }}
  </div>
  `,
  styleUrls: [ './app.component.css' ]
})
export class AppComponent  {

  url$ = this.router.events.pipe(
    map(() => this.router.url),
  );

  constructor(
    private router: Router
  ) {}

}

答案 1 :(得分:0)

您可以通过以下方式访问第一个子数据:

constructor(route: ActivatedRoute) {
  route.url.subscribe(() => {
    console.log(route.snapshot.firstChild.data);
   });
}

答案 2 :(得分:0)

您可以简单地使用此技术

import { Component, OnInit, Input } from '@angular/core';
    import {ActivatedRoute} from "@angular/router";
    @Component({
      selector: 'app-header',
      templateUrl: './header.component.html',
      styleUrls: ['./header.component.scss']
    })
    export class HeaderComponent implements OnInit {
      constructor(private activatedRoute: ActivatedRoute) {
        this.activatedRoute.url.subscribe(activeUrl =>{
          this.url=window.location.pathname;
        });
      }

      ngOnInit() {
      }

    }