使用Angular2在根组件中更改路由时获取参数

时间:2016-10-14 09:59:25

标签: angular parameters angular-ui-router

所以我想在根组件中更改路由时获取参数,我试过这个:

export class AppComponent {
       constructor(_router: Router) {
         _router.events.subscribe((links) => {
        console.log("detection : ",links);
    });
    }
}

在结果中我获得了每个路线变化事件的链接,例如:

deletection : "/product/1"
deletection : "/product/2"

但我无法获取参数值(1和2)。

我还测试了activateRoute宽度参数,但是当路线改变时我没有得到任何结果。

路线档案:

export const routes: Routes = [

    { path: "", component: LoginComponent },
    { path: "login", component: LoginComponent, canActivate: [LoggedOutGuard] },
    { path: "product/:id", component: ProductComponent, canActivate: [LoggedOutGuard] },

];

export const appRoutingProviders: any[] = [];

export const routing: ModuleWithProviders = RouterModule.forRoot(routes);

3 个答案:

答案 0 :(得分:1)

  

所以我希望在路由更改时获取根组件中的参数

你不能。为什么?因为您的根组件未分配给任何路由。转到 ProductComponent 并将其更改为以下内容:

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

@Component({
  selector: 'product'
})
export class ProductComponent implements OnInit, OnDestroy {
  private sub: Subscription;

  constructor(
    private route: ActivatedRoute
  ) { }

  ngOnInit(): void {
    this.sub = this.route.params.subscribe(params => {
      console.log(params)
    });
  }

  ngOnDestroy() {
    this.sub.unsubscribe();
  }
}

您会注意到您的产品ID将在控制台中登录,为什么?由于 ProductComponent 已分配给路径product/:id,因此基本上您的组件只能获取分配给它们的路径的路径参数。

AppComponent 了解路径参数的唯一方法是使用服务来共享该信息。因此,您的 ProductComponent 应该与您创建的 RouteParamsService 进行对话。

答案 1 :(得分:0)

我认为这可能对你有帮助....

constructor(private router:Router){
    router.routerState.queryParams.subscribe(
        (data:any) => {
            console.log("userName parameter in routing "+data['userName']);
        });
}

答案 2 :(得分:0)

我认为你需要像

这样的东西
$row = get_db_row("SELECT UNIX_TIMESTAMP(send_date) AS send_date_ts
  FROM table WHERE $condition");
$hours = (int) ($row['send_date_ts'] / 3600);
$current_hours = (int) (time() / 3600);
if ($hours == $current_hours) {
  // current hour
}

未经过测试