angular - 为 Angular 2 的核心组件提供路由服务

标签 angular typescript

我有 ng2 应用程序,其中有 app/app.module ... 和 core/core.module ...。

在核心模块中,我有一些模块仅在应用程序顶层使用一次(如在官方文档中),但其中一个模块需要 Router 模块(某些功能与路由器一起使用)。

但路由器在 App.module 中提供(所有 App 路由)。我遇到了问题 - 没有来自 core/header/header.component 的 ActivatedRouteSnapshot 提供者

我该如何解决?我应该将 header 从 core 放置到 app 文件夹,还是应该为 core 模块提供路由器?谢谢。

附言使用路由器模块更新。我仍然遇到错误 - 没有 RouterStateSnapshot 的提供者!

标准路由器和 activatedRoute 正在运行的其他有趣的事情。因此,当我从构造函数中删除 RouterStateSnapshot 时(当然还删除了相关的 console.log),所有代码都工作正常。所以看起来 routerModule 是可用的,这真的很奇怪。

import { NgModule, Component, OnInit} from '@angular/core';
import { CommonModule } from '@angular/common';
//import { ROUTER_DIRECTIVES, Router } from '@angular/router-deprecated';
import { Router, ActivatedRoute, Params, RouterStateSnapshot } from '@angular/router';
/* ------- !Angular2 core  ---------*/

import {HTTPPatientsListService} from '%cgm_sharedServices%/http_patients_list.service';
/* ------- !Services  ---------*/

import { Config } from 'appConfig';
/* ------- !Config  ---------*/


@Component({
  selector: 't_breadcrumbs',
  template: `

      <h1>Bread</h1>

        <!--<div class="row wrapper border-bottom white-bg page-heading">-->
        <!--<div class="col-lg-10">-->
            <!--<h2>{{staticData.title}}</h2>-->
            <!--<ol class="breadcrumb">-->
              <!--<li>-->
                 <!--<a [routerLink]="['Dashboard']" tabindex="-1">{{staticData.homeName}}</a>-->
              <!--</li>-->
              <!--<li *ngFor="let crumbData of crumbsCollection; let last = last" [ngClass]="{'active': last}">-->
                  <!--<a *ngIf="!last" (click)="navigateTo(crumbData.urlPath)" tabindex="-1">{{crumbData.displayName}}</a>-->
                  <!--<span *ngIf="last"><b>{{crumbData.displayName}}</b></span>-->
              <!--</li>-->
            <!--</ol>-->
          <!--</div>-->
          <!--<div class="col-lg-2">-->
        <!---->
            <!--</div>-->
        <!--</div>-->
  `,
  styles: [`
    .breadcrumb {
      background-color: #ffffff;
      padding: 0;
      margin-bottom: 0;
    }

    .breadcrumb > li a {
      color: inherit;
    }

    .breadcrumb > .active {
      color: inherit;
    }
  `]
})

export class BreadcrumbsComponent implements OnInit {




  // contains home static name and dynamic current component name
  private staticData = {
    'title': '',
    'homeName': 'Home'
  };

  private tempTitle: string;
  private crumbsCollection = [];

  constructor(
    private router: Router,
    private activatedRoute: ActivatedRoute,
    private routerStateSnap: RouterStateSnapshot,

    private config: Config,
    private httpPat: HTTPPatientsListService) { }


  ngOnInit() {
    console.log(this.activatedRoute);
    console.log(this.routerStateSnap);
  }


}


import { RouterModule } from '@angular/router';
@NgModule({
  imports: [ CommonModule, RouterModule ],
  declarations: [ BreadcrumbsComponent ],
  exports: [ BreadcrumbsComponent ]
})

export class BreadcrumbsModule {}

最佳答案

RouterStateSnapshot interface 的预期用途是:

  constructor(router: Router) {
    const snapshot: RouterStateSnapshot = router.routerState.snapshot;
    //...
  }

它用作接口(interface),而不是提供程序。 It may be available in guards ,但那是因为它是作为保护方法中的参数提供的,而不是作为可注入(inject)的(例如参见 CanActivate)。

关于angular - 为 Angular 2 的核心组件提供路由服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40087247/

相关文章:

angular - Angular ListView 组件,它将接受任何数据源

具有多部分形式的 Angular 6 后请求不包含已发布对象的附加文件

angular - 奇怪的 NativeScript/Angular2 问题,应用程序在错误的位置查找模板

javascript - 如何在 Angular 中获取绝对定位元素的宽度

javascript - 在 Angular 7 中获取参数值的不同结果

javascript - Angular 4 : use loggedInMethod to change menu

javascript - 无法以 Angular 显示用户名

ios - ionic2 - 提供的参数与调用目标的任何签名都不匹配

typescript - 无法导入自定义组件 - Angular2 和 TypeScript

Angular Jest 测试打开 MatDialog 的组件 - 打开不是函数