当前位置:  开发笔记 > 编程语言 > 正文

如何获得当前路线

如何解决《如何获得当前路线》经验,为你挑选了13个好方法。

目前的文档只讨论获取路由参数,而不是实际的路径段.

例如,如果我想找到当前路线的父母,那怎么可能呢?



1> Victor96..:

新的V3路由器有一个url属性.

this.router.url === '/login'


当你使用Hash策略导航时,这是无用的,url总是"/"
我使用此代码,我在字符串变量中获取此URL但当我尝试在控制台.log中打印时,它不会打印this.fullUrl = this.router.url console.log(this.fullUrl); //不打印
@Murtuza这里是一个解决方案:`this.router.events.filter((event:any)=> event instanceof NavigationEnd).subscribe(event => {console.log('这就是您要寻找的',event.url );});`。确保从'@ angular / router'导入`import {Router,NavigationEnd};`
@NinjaCoding我正在使用哈希策略,但得到的只是“ /”。如何使用Hash获取路线网址?
请查看使用新的路由器活动功能信息中心

2> lowcrawler..:

角度RC4:

您可以导入Router@angular/router

然后注入它:

constructor(private router: Router ) {

}

然后调用它的URL参数:

console.log(this.router.url); //  /routename


我使用了这个解决方案,但我总是得到这个"/".有谁知道为什么?
Angular Dependency Injection依赖于TypeScript糖语法,因此当您在构造函数签名中声明private _router:Router时,会在注入了Router的当前类实例中自动创建属性_router.这句话this.router = _router; 对我来说只是一个开销,因为你有两个引用同一个对象实例(在这种情况下,路由器).
关于如何导入路由器本身的额外清晰度非常有用.如果您使用自定义路由器,是否可以澄清它是否会有所不同?

3> Günter Zöchb..:

注入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(...);
}

另请参见Angular 2路由器事件侦听器


@GunterZochbauer有没有办法让_requested_ route _before_被激活?例如,如果我想将_requested_路由存储在`canActivate()`方法中,以便我可以重定向到"登录"页面,然后在用户进行身份验证后将_back_重定向到原始路由?
这给了我'url'的路径.我如何找到'路由名称',以便我可以将它们以数组形式传递给`navigate`方法以及我要导航到的子路由的(附加)名称.

4> Rajath M S..:

对于新路由器> = 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"
}



5> n4nd0_o..:

对于那些仍在寻找这个的人.在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
}

参考文献:

    https://angular.io/docs/ts/latest/api/router/index/ActivatedRoute-interface.html

    https://angular.io/docs/ts/latest/api/router/index/Router-class.html

    https://angular.io/docs/ts/latest/guide/router.html



6> ttugates..:

获取路线段:

import { ActivatedRoute, UrlSegment } from '@angular/router';

constructor( route: ActivatedRoute) {}

getRoutes() { const segments: UrlSegment[] = this.route.snapshot.url; }



7> Vlad..:

用这个

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';


这真的是推荐的方法吗,就像检查当前URL指向的位置一样简单吗?在这一点上,我并不反对你。但是,我注意到路由是许多更改,更新,混乱等的根源。我有点期待* ActivatedRoute *主要用于此目的,而不是* Router *。我是否想念这个问题的复杂性?

8> Jose G Varan..:

你可以试试

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 它给出了路径名称.



9> Andrei Diaco..:

要可靠地获得完整的当前路线,您可以使用它

this.router.events.subscribe(
  (event: any) => {
    if (event instanceof NavigationEnd) {
      console.log('this.router.url', this.router.url);
    }
  }
);



10> Sanket Berde..:

本机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);

注意:请勿在服务器端部渲染中使用它



11> Mateen..:

简短的版本,如果您导入了路由器,那么您可以简单地使用诸如

this.router.url ===“ /搜索”

否则请执行以下操作

1)导入路由器

import { Router } from '@angular/router';

2)在构造函数中声明其条目

constructor(private router: Router) { }

3)在您的函数中使用其值

yourFunction(){
    if(this.router.url === "/search"){
        //some logic
    }
}

@victor的答案对我有所帮助,这与他的答案相同,但有一点细节,因为它可能对某人有帮助



12> Arpit Agarwa..:

在Angular2 Rc1中,您可以注入RouteSegment并以naviagte方法传递它们.

constructor(private router:Router,private segment:RouteSegment) {}

  ngOnInit() {
    this.router.navigate(["explore"],this.segment)
  }



13> adrhc..:

使用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的代码。

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有