当前文档仅讨论获取路径参数,而不是实际的路径段。
例如,如果我想找到当前路线的父级,那怎么可能?
window.location
是,如果将来他们希望实现服务器端渲染,则将面临一些困难,因为window
Node.js服务器上不存在该问题,但是他们需要使用Angular标准方法来访问路由。而且在服务器和浏览器上都可以。
当前文档仅讨论获取路径参数,而不是实际的路径段。
例如,如果我想找到当前路线的父级,那怎么可能?
window.location
是,如果将来他们希望实现服务器端渲染,则将面临一些困难,因为window
Node.js服务器上不存在该问题,但是他们需要使用Angular标准方法来访问路由。而且在服务器和浏览器上都可以。
Answers:
新的V3路由器具有url属性。
this.router.url === '/login'
this.router.events.filter((event: any) => event instanceof NavigationEnd).subscribe(event => { console.log('this is what your looking for ', event.url); });
。确保您进口import { Router, NavigationEnd } from '@angular/router';
角RC4:
您可以导入 Router
从@angular/router
然后注入:
constructor(private router: Router ) {
}
然后调用它的URL参数:
console.log(this.router.url); // /routename
注入Location
您的组件并阅读location.path();
您需要在您需要添加ROUTER_DIRECTIVES
某个地方添加以便Angular可以解析Location
。import: [RouterModule]
到模块。
更新资料
在V3(RC.3)路由器中,您可以ActivatedRoute
使用其snapshot
属性来注入和访问更多详细信息。
constructor(private route:ActivatedRoute) {
console.log(route);
}
要么
constructor(private router:Router) {
router.events.subscribe(...);
}
navigate
与要导航到的子路线的(附加)名称一起以数组形式传递给方法。
canActivate()
对于新路由器> = RC.3
最好的简单方法是!
import { Router } from '@angular/router';
constructor(router: Router) {
router.events.subscribe((url:any) => console.log(url));
console.log(router.url); // to print only path eg:"/login"
}
用这个
import { Router, NavigationEnd } from '@angular/router';
constructor(private router: Router) {
router.events.filter(event => event instanceof NavigationEnd)
.subscribe(event => {
console.log(event);
});
}
并在main.ts
进口
import 'rxjs/add/operator/filter';
编辑
现代方式
import {filter} from 'rxjs/operators';
router.events.pipe(
filter(event => event instanceof NavigationEnd)
)
.subscribe(event => {
console.log(event);
});
/
。
对于那些仍在寻找这个的人。在Angular 2.x上,有几种实现方法。
constructor(private router: Router, private activatedRoute: ActivatedRoute){
// string path from root to current route. i.e /Root/CurrentRoute
router.url
// just the fragment of the current route. i.e. CurrentRoute
activatedRoute.url.value[0].path
// same as above with urlSegment[]
activatedRoute.url.subscribe((url: urlSegment[])=> console.log(url[0].path))
// same as above
activatedRoute.snapshot.url[0].path
// the url fragment from the parent route i.e. Root
// since the parent is an ActivatedRoute object, you can get the same using
activatedRoute.parent.url.value[0].path
}
参考文献:
您可以尝试
import { Router, ActivatedRoute} from '@angular/router';
constructor(private router: Router, private activatedRoute:ActivatedRoute) {
console.log(activatedRoute.snapshot.url) // array of states
console.log(activatedRoute.snapshot.url[0].path) }
替代方式
router.location.path(); this works only in browser console.
window.location.pathname
给出路径名。
为了可靠地获得完整的当前路线,您可以使用此
this.router.events.subscribe(
(event: any) => {
if (event instanceof NavigationEnd) {
console.log('this.router.url', this.router.url);
}
}
);
原生window
对象也可以正常工作
console.log('URL:' + window.location.href);
console.log('Path:' + window.location.pathname);
console.log('Host:' + window.location.host);
console.log('Hostname:' + window.location.hostname);
console.log('Origin:' + window.location.origin);
console.log('Port:' + window.location.port);
console.log('Search String:' + window.location.search);
注意:请勿在服务器端渲染中使用此功能
简短的版本,如果您导入了路由器,那么您可以简单地使用诸如
this.router.url ===“ /搜索”
否则请执行以下操作
1)导入路由器
import { Router } from '@angular/router';
2)在构造函数中声明其条目
constructor(private router: Router) { }
3)在您的函数中使用其值
yourFunction(){
if(this.router.url === "/search"){
//some logic
}
}
@victor的答案对我有所帮助,这与他的答案相同,但有一点细节,因为它可能对某人有帮助
使用angular 2.2.1(在基于angular2-webpack-starter的项目中)可以做到这一点:
export class AppComponent {
subscription: Subscription;
activeUrl: string;
constructor(public appState: AppState,
private router: Router) {
console.log('[app] constructor AppComponent');
}
ngOnInit() {
console.log('[app] ngOnInit');
let _this = this;
this.subscription = this.router.events.subscribe(function (s) {
if (s instanceof NavigationEnd) {
_this.activeUrl = s.urlAfterRedirects;
}
});
}
ngOnDestroy() {
console.log('[app] ngOnDestroy: ');
this.subscription.unsubscribe();
}
}
在AppComponent的模板中,您可以使用{{activeUrl}}。
该解决方案的灵感来自RouterLinkActive的代码。
这是在Angular 2.3.1中为我工作的内容。
location: any;
constructor(private _router: Router) {
_router.events.subscribe((data:any) => { this.location = data.url; });
console.warn(this.location); // This should print only path e.g. "/home"
}
该data
是一个对象,我们需要url
包含在该对象的属性。因此,我们可以在变量中捕获该值,也可以在HTML页面中使用该变量。例如,我只想在用户位于主页上时显示div。在这种情况下,我的路由器网址值为/home
。因此,我可以通过以下方式编写div:
<div *ngIf="location == '/home'">
This is content for the home page.
</div>
您可以ActivatedRoute
用来获取当前路由器
原始答案(RC版)
我在AngularJS Google Group上找到了一个解决方案,它是如此简单!
ngOnInit() {
this.router.subscribe((url) => console.log(url));
}
这是原始答案
https://groups.google.com/d/msg/angular/wn1h0JPrF48/zl1sHJxbCQAJ
url
现在不再是URL和字符串,而是一个ComponentInstruction
。
方式1:使用Angular:this.router.url
import { Component } from '@angular/core';
// Step 1: import the router
import { Router } from '@angular/router';
@Component({
template: 'The href is: {{href}}'
/*
Other component settings
*/
})
export class Component {
public href: string = "";
//Step 2: Declare the same in the constructure.
constructor(private router: Router) {}
ngOnInit() {
this.href = this.router.url;
// Do comparision here.....
///////////////////////////
console.log(this.router.url);
}
}
WAY 2 Window.location,就像我们在Javascript中所做的那样,如果您不想使用路由器
this.href= window.location.href;
为了您的目的,您可以使用this.activatedRoute.pathFromRoot
。
import {ActivatedRoute} from "@angular/router";
constructor(public activatedRoute: ActivatedRoute){
}
在pathFromRoot的帮助下,您可以获得父URL的列表,并检查URL的所需部分是否符合您的条件。
有关其他信息,请查看本文http://blog.2muchcoffee.com/getting-current-state-in-angular2-router/ 或从npm安装ng2-router-helper
npm install ng2-router-helper
截至目前,我的路线如下:
this.router.url.subscribe(value => {
// you may print value to see the actual object
// console.log(JSON.stringify(value));
this.isPreview = value[0].path === 'preview';
})
哪里router
是ActivatedRoute
router.events.subscribe(e => {
if (e instanceof NavigationEnd) {
this.currentUrl = e.url;
}
});
这很简单,在angular 2中,您只需要像这样导入Router库:
import { Router } from '@angular/router';
然后,必须在组件或服务的构造函数中实例化它,如下所示:
constructor(private _router: Router) {}
然后在代码的任何部分,无论是在函数,方法,构造中,无论如何:
this._router.events
.subscribe(
(url:any) => {
let _ruta = "";
url.url.split("/").forEach(element => {
if(element!=="" && _ruta==="")
_ruta="/"+element;
});
console.log("route: "+_ruta); //<<<---- Root path
console.log("to URL:"+url.url); //<<<---- Destination URL
console.log("from URL:"+this._router.url);//<<<---- Current URL
});
this.router.events.subscribe((val) => {
const currentPage = this.router.url; // Current page route
const currentLocation = (this.platformLocation as any).location.href; // Current page url
});
如果您需要访问当前URL,通常必须等待NavigationEnd或NavigationStart做一些事情。如果您仅订阅路由器事件,则订阅将在路由生命周期中输出许多事件。而是使用RxJS运算符仅过滤所需的事件。这样做的好处是现在我们有更严格的类型!
constructor(private router: Router) {
router.events.pipe(
filter(ev => (ev instanceof NavigationEnd))
).subscribe((ev: NavigationEnd) => {
console.log(ev.url);
});
}
当用户浏览应用程序或访问URL时,我遇到了需要URL路径的问题(或刷新特定的URL)以显示基于URL的子组件。
另外,我想要可以在模板中使用的Observable,因此router.url不是一个选择。也没有router.events订阅,因为在初始化组件的模板之前会触发路由。
this.currentRouteURL$ = this.router.events.pipe(
startWith(this.router),
filter(
(event) => event instanceof NavigationEnd || event instanceof Router
),
map((event: NavigationEnd | Router) => event.url)
);
希望对您有帮助,祝您好运!
window.location.pathname