Невозможно получить доступ к параметру маршрута через route.snapshot в корневом компоненте - PullRequest
0 голосов
/ 15 ноября 2018

Я хочу получить токен из URL, но в качестве значения он возвращает ноль.

app.component.ts:

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit {    
  constructor(private route: ActivatedRoute) { }

    ngOnInit(){  
    const token = this.route.snapshot.paramMap.get('token');
    console.log(token);

и routing.ts

{ path: ':token', component: AppComponent }

я хочу получить содержимое после / в URL, например: localhost: 4200 / content-to-grab какие-либо решения?

Ответы [ 4 ]

0 голосов
/ 15 ноября 2018

Ваш подход в порядке, есть еще одна концептуальная проблема:

вы пытаетесь связать путь с корневым компонентом .

Скорее всего, ваш корневой модуль выглядит так:

@NgModule({
  imports: [
    RouterModule.forRoot(...)
  ],
  declarations:[
    ...
    AppComponent,
    ...
  ],
  boostrap: [AppComponent]
})
export class AppModule {}

первый экземпляр из AppComponent, созданный платформой во время этапа начальной загрузки, будет использоваться как корневой компонент , и, как следствие, введенный ActivatedRoute будет сортироваться "исключен" из определения вашего маршрута.

Кроме того, экземпляры AppComponent, разрешенные с помощью директивы RouterOutlet, будут знать ваше определение маршрута.

Вы можете проверить это самостоятельно в следующем стеке .

Экземпляр ActivatedRoute, введенный в первый экземпляр AppComponent, не будет отражать параметры маршрута ни асинхронно, ни синхронизировано. Если вы перейдете к чему-то вроде {url}/#/bla, второй экземпляр AppComponent будет разрешен из-за <router-outlet>. Внедренный в него экземпляр ActivatedRoute будет отражать значения параметров маршрута, оба синхронизируются. и асинхронно.

0 голосов
/ 15 ноября 2018

Попробуйте схватить вот так.

this.route.snapshot.params["token"]
0 голосов
/ 15 ноября 2018
ngOnInit(){  
    const token = this.activatedRout.snapshot.params.token;
}
0 голосов
/ 15 ноября 2018

Измените свой код на

this.route.paramMap.subscribe(params => { console.log(params.get('token'));})
...