2017-01-22 19 views
0

私はブレッドクラムコンポーネントを持っています。それはJavaScriptにコンパイルされ、希望の結果をレンダリングするようにうまく動作しますが、IDEは私が訂正できないエラーを投げます。次のようにその氏は述べています: - 以下のように私のブレッドクラムのためTypeScriptスローエラー "プロパティ 'breadcrumb'がタイプ 'データ'に存在しません。"

[ts] Property 'breadcrumb' does not exist on type 'Data'. 

コードは次のとおりです。 -

import { Component } from '@angular/core'; 
import { Router, ActivatedRoute, NavigationEnd } from '@angular/router'; 
import 'rxjs/add/operator/filter'; 

import { BreadcrumbModel } from './breadcrumb.model'; 

@Component({ 
    selector: 'breadcrumb', 
    template: ` 
    <ol class="breadcrumb"> 
    <li *ngFor="let breadcrumb of breadcrumbs; let last = last"> 
     <a [routerLink]="breadcrumb.url">{{breadcrumb.label}}</a> 
    </li> 
    </ol>` 
}) 
export class BreadcrumbComponent { 
    breadcrumbs: Array<BreadcrumbModel>; 
    constructor(private router: Router, private route: ActivatedRoute) { } 
    ngOnInit() { 
    this.router.events 
     .filter(event => event instanceof NavigationEnd) 
     .subscribe(event => { // note, we don't use event 
     this.breadcrumbs = []; 
     let currentRoute = this.route.root, 
      url = ''; 
     do { 
      let childrenRoutes = currentRoute.children; 
      currentRoute = null; 
      childrenRoutes.forEach(route => { 
      if (route.outlet === 'primary') { 
       let routeSnapshot = route.snapshot; 
       url += '/' + routeSnapshot.url.map(segment => segment.path).join('/'); 
       this.breadcrumbs.push({ 
       label: route.snapshot.data.breadcrumb, 
       url: url 
       }); 
       currentRoute = route; 
      } 
      }) 
     } while (currentRoute); 
     }) 
    } 
} 

次のようにブレッドクラムモデルのコードは次のとおりです。 -

export class BreadcrumbModel{ 
    label:string; 
    url:string; 
} 

エラーIブラウザには次のように入ります: -

[at-loader] src\app\shared\core\breadcrumb\breadcrumb.component.ts:34:44 
    Property 'breadcrumb' does not exist on type '{ [name: string]: any; }'. 
errors @ client?cd17:80 
sock.onmessage @ socket.js?e5d0:37 
EventTarget.dispatchEvent @ eventtarget.js?3e89:51 
(anonymous) @ main.js?45b8:274 
SockJS._transportMessage @ main.js?45b8:272 
EventEmitter.emit @ emitter.js?927b:50 
WebSocketTransport.ws.onmessage @ websocket.js?c17e:35 
wrapFn @ zone.js?fad3:1039 
ZoneDelegate.invokeTask @ zone.js?fad3:275 
Zone.runTask @ zone.js?fad3:151 
ZoneTask.invoke @ zone.js?fad3:345 

ターゲットをES5からES6に変更したくない。これは実行可能な解決策ではないようです。 IDEのスクリーンショットは次のとおりです。 - enter image description here

問題を解決するためにお手伝いください。このエラーが発生すると、TSLintはブラウザに警告を表示しません。

答えて

2

angularで値を取得するには[name]という表記を使用する必要があります。

route.snapshot.data['breadcrumb']; 

がため

+0

感謝をCustom Preloading Strategyを読み、app/selective-preloading-strategy.tsサンプルファイルまでスクロール:もちろん、決してそれがいずれかの方法で動作しますので、「に持っている」が、使用することを文句を停止する活字体コンパイラを取得することはありませんそれを指摘する。私はそれを試して、それは動作します。 –

関連する問題