首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从其他组件访问激活路由数据

从其他组件访问激活路由数据
EN

Stack Overflow用户
提问于 2017-01-12 12:53:28
回答 1查看 1.6K关注 0票数 3

我们有组件(ka-座舱面板),它不是映射到任何路由,而是手动插入到其他组件中,如下所示:

代码语言:javascript
复制
..
...
<section class="ka-cockpit-panel cockpit-1 pull-left">
            <ka-cockpit-panel></ka-cockpit-panel>
</section>
...
..

在此组件中,我希望访问当前活动路由数据

如果我们有一些其他组件(比如ka-integration-component ),并且它有一些与它相关的路由数据(如下面所示),那么每当我们导航到这个组件(通过url或者通过单击某些路由链接)时,我们都希望在我们的ka-座舱组件中访问集成组件路由数据。

代码语言:javascript
复制
 ..
    ... 
    {       
        path: "",       
        component: IntegrationComponent,
        data : {
            cockpit1 : false,
            cockpit2 : true,
            kpi : true
        },  
    }
    ..
    ...

基本上,我们想要配置我们的卡-驾驶舱组件在我们的应用程序中的某些组件,这是映射到某些路线,以便我们可以隐藏/显示或改变它的外观。

驾驶舱组件代码:

代码语言:javascript
复制
import { Component, OnInit } from '@angular/core';
import { Router,Event,NavigationEnd,ActivatedRoute } from '@angular/router';

@Component({
    selector: 'ka-cockpit-panel',
    templateUrl: './cockpit-panel.component.html',
    styleUrls : ['./cockpit-panel.component.scss']
})
export class CockpitPanelComponent implements OnInit {

    constructor(private router:Router,private activatedRoute : ActivatedRoute) {
         this.router.events.subscribe( (event:Event) => {
            if(event instanceof NavigationEnd) {
                console.log("Cockpit Panel Component : Route successfully changed -  ",event,this.router,this.activatedRoute);

                  // THIS IS WHAT WE WANT - get  Integration component route data here whenever i navigate to integration component!!!

            }
        });
     }

    ngOnInit() { }
}
EN

回答 1

Stack Overflow用户

发布于 2017-01-12 13:13:36

您必须将解析护卫用于您想要实现的东西。

// MyDataResolver服务

代码语言:javascript
复制
import { Injectable }             from '@angular/core';
import { Router, Resolve, RouterStateSnapshot,
         ActivatedRouteSnapshot } from '@angular/router';

@Injectable()
export class MyDataResolver implements Resolve<any> {
  constructor(private cs: CrisisService, private router: Router) {}
  resolve(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<any> {

    let pathFromRoot = route.pathFromRoot;

    // you can compare pathFromRoot with your route to return different data

    return Promise.resolve({
        cockpit1 : false,
        cockpit2 : true,
        kpi : true
    });

  }
}

//路由配置

代码语言:javascript
复制
.
.
{       
    path: "",       
    component: IntegrationComponent,
    resolve : {
        data: MyDataResolver
    },  
}
.
.

//构成部分

代码语言:javascript
复制
export class CockpitPanelComponent implements OnInit {
  someBinding : string = "testing Value";

  constructor(private router:Router,private activatedRoute : ActivatedRoute) {

    this.activatedRoute.data.subscribe( (res) => {

      // here you will get your data from resolve guard.
      console.log(res);

    });
  }

  ngOnInit() { }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41613750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档