2016-10-17 4 views
9

私はアプリ/ app.module ...とコア/ core.moduleを持ってNG2アプリを持っている....コアモジュールでは角度コアコンポーネント用のルータサービスの提供2

私はで使用されるいくつかのモジュールを持っていますアプリのトップレベルで、公式のdocのように1回だけですが、そのモジュールの1つにルータモジュールが必要です(一部の機能はルータで機能しています)。

しかし、ルータはApp.module(すべてのAppルーティングを使用)で提供されています。私は問題がある - コア/ヘッダー/ header.componentからActivatedRouteSnapshotのプロバイダがない

どのように解決できますか?コアからアプリケーションフォルダーにヘッダーを配置する必要がありますか、コアモジュール用にルータを用意する必要がありますか?ありがとう。

P.S.ルータモジュールでアップデートしてください。私はまだエラーが発生しました - 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 {} 

答えて

14

RouterStateSnapshot interfaceの予想される使用法は:それはないプロバイダとして、インターフェースとして使用される

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

It may be available in guardsですが、これはガード方法のパラメータとして提供され、注射可能ではありません(たとえばCanActivateを参照)。

+0

エスタスさんありがとうございました。 – Velidan

+0

ようこそ。 – estus

関連する問題