Angular - 如何在应用程序组件中获取当前 url
Angular - How to get current url in app component
我试图在 AppComponent
中获取当前 url 的应用程序,但它总是 returns 根路径 /
。例如,如果我在新选项卡中访问 /users
,预期结果应该是 /users
,但是当我在控制台中查看时,它显示
/
.
但是,当我在子组件中执行相同操作时它会起作用。以下是我的代码:
import {Component} from '@angular/core'
import {ActivatedRoute, Router} from '@angular/router'
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['app.component.scss'],
})
export class AppComponent {
constructor(router: Router) {
console.log(this.router.url) // return '/'
}
}
这怎么可能?
如果要获取当前 url,请改用 ActivatedRoute
。
在你的构造函数中像这样添加它
constructor(
private router: Router,
private route: ActivatedRoute) {
route.params.subscribe(p => {
//let's say you want to get id parameter.
console.log(p['id']);
});
}
你递归地迭代父 属性 直到你到达对应于你的应用程序根的最顶层元素。
您可以订阅 router.events
并过滤 NavigationEnd 事件以获取当前活动路线 url。
this.router.events.subscribe((e) => {
if (e instanceof NavigationEnd) {
console.log(e.url);
}
});
提到如果没有定义有效的路由器,这将失败。
在 Angular 4 中,您可以使用 Location 模块从 app.component.ts 中获取 完整路径字符串 。
例如,在您的浏览器中,当您导航到“http://yoursite.com/products/cars?color=red&model=202”时,下面的代码将输出 pathString “/products/cars?color=red&model=202”。
在app.component.ts
import { Component } from '@angular/core';
import { Router} from '@angular/router';
import { Location } from '@angular/common';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent {
title = 'app';
constructor(
private location: Location
) {
var pathString = location.path();
console.log('appComponent: pathString...');
console.log(pathString);
}
}
*来源:https://tutorialedge.net/post/typescript/angular/angular-get-current-route-location/
对于第一次访问 SPA,似乎当前的 url 应用程序并不总是可以通过 Angular 方式访问。尚未加载任何路由,但您可能仍需要为某些内部进程访问所请求的 url。
所以我这样做了:
let strings = window.location.href.split(window.location.host);
let url = strings[strings.length-1];
我试图在 AppComponent
中获取当前 url 的应用程序,但它总是 returns 根路径 /
。例如,如果我在新选项卡中访问 /users
,预期结果应该是 /users
,但是当我在控制台中查看时,它显示
/
.
但是,当我在子组件中执行相同操作时它会起作用。以下是我的代码:
import {Component} from '@angular/core'
import {ActivatedRoute, Router} from '@angular/router'
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['app.component.scss'],
})
export class AppComponent {
constructor(router: Router) {
console.log(this.router.url) // return '/'
}
}
这怎么可能?
如果要获取当前 url,请改用 ActivatedRoute
。
在你的构造函数中像这样添加它
constructor(
private router: Router,
private route: ActivatedRoute) {
route.params.subscribe(p => {
//let's say you want to get id parameter.
console.log(p['id']);
});
}
你递归地迭代父 属性 直到你到达对应于你的应用程序根的最顶层元素。
您可以订阅 router.events
并过滤 NavigationEnd 事件以获取当前活动路线 url。
this.router.events.subscribe((e) => {
if (e instanceof NavigationEnd) {
console.log(e.url);
}
});
提到如果没有定义有效的路由器,这将失败。
在 Angular 4 中,您可以使用 Location 模块从 app.component.ts 中获取 完整路径字符串 。
例如,在您的浏览器中,当您导航到“http://yoursite.com/products/cars?color=red&model=202”时,下面的代码将输出 pathString “/products/cars?color=red&model=202”。
在app.component.ts
import { Component } from '@angular/core';
import { Router} from '@angular/router';
import { Location } from '@angular/common';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent {
title = 'app';
constructor(
private location: Location
) {
var pathString = location.path();
console.log('appComponent: pathString...');
console.log(pathString);
}
}
*来源:https://tutorialedge.net/post/typescript/angular/angular-get-current-route-location/
对于第一次访问 SPA,似乎当前的 url 应用程序并不总是可以通过 Angular 方式访问。尚未加载任何路由,但您可能仍需要为某些内部进程访问所请求的 url。
所以我这样做了:
let strings = window.location.href.split(window.location.host);
let url = strings[strings.length-1];