2016-05-06 4 views
6

を渡し、同じ構成要素にルーティングいくつかのコンポーネント:Angular2のRC1、新しいルータおよび非推奨のルータで、持っていたデータ

いくつかのコンポーネント

import {Component, Injector} from 'angular2/core'; 
import {IDataServiceSome} from './IDataServiceSome'; 
import {RouteData} from 'angular2/router'; 

@Component({ 
    selector: 'Some', 
    templateUrl: './Some.html' 
}) 
export class Some { 
    Model; 
    DataService: IDataServiceVendor; 

    constructor(routeData: RouteData, injector: Injector) { 
     var dataServiceToken = routeData.get('DataServiceToken'); 
     this.DataService = injector.get(dataServiceToken); 
     this.Model = DataService.getSomeModel(); 
    } 
} 

IDataServiceSome

export interface IDataServiceSome { 
    getSomeModel(): Object; 
} 

ご想像のとおり器Comp2、器Comp3、等...

import {Component} from 'angular2/core'; 
import {RouteConfigs, Router, ROUTER_DIRECTIVES} from 'angular2/router'; 

import {DataServiceSome1} from './IDataServiceSome1'; 

@RouteConfigs([ 
    { path: '/Some', name: 'Some', component: Some, data: { DataServiceToken: DataServiceSome1 } }]) 
@Component({ 
    directives: [ROUTER_DIRECTIVES], 
    providers: [DataServiceSome1], 
    selector: 'Comp1', 
    template: 
    `<div> 
     <router-outlet></router-outlet> 
     <h1>Comp1 routed to Some</h1> 
    </div>` 
}) 
export class Comp1{ 

} 

がCOMP1が、ありますが、多くのデータIDataServiceSomeを実装するサービスとSomeへのルートの多くのコンポーネントがあります。どのデータサービスを使用するかの選択は、injectorに知られているデータトークンを使用してSomeコンポーネントにルーティングするコンポーネントから発生します。 rc1リリースと新しいルータでは、RouteDataは廃止または削除されましたが、このシナリオはどのように進んでいますか?

答えて

2

Angular2がdataを戻すのを待ちます。私の場合、どのデータサービスが必要かを決定するサービスは、DIを介して注入することができます。私はそれが過度のものであることを発見しました。単にURLクエリ文字列にあるようにパラメータを渡すだけです。唯一の相違点は、より良いエクスペリエンスのためにパラメータがユーザーに表示されないようにすることでした。

出典:

http://www.github.com/angular/angular/issues/8515

2

更新

RC.4バックdata

経路を
{ path: 'parent/:id', data: {one: 1}, resolve: {two: 'resolveTwo'}} 

を使用してアクセスを使用してデータを渡す
<a [routerLink]="['/crisis-center', {bar: 'foo1'}]">Crisis Center</a> 
  • パラメータが渡されたリンクとコードを含んでいる、app/crisis-center/crisis-center.coomponent.tsコードが含まれていパラメータが読み込まれ、コンソールに書き込まれます。

    私はもう余分なデータのサポートはないと思います。

+0

しかしdata'は、クエリ文字列またはルートパラメーターを使用する必要がありますいずれかを意味し、 'サポートしていません。どちらも「ヒーローのツアー」の一例です。私の場合、私は本当にユーザーにURLの一部としてデータサービストークンを見せたくないので、その理由はありません。だから私は 'データ'がなぜ取り除かれたのかをよく理解していない。 – RoninCoder

+0

ルートは単なるURLとコンポーネント名です。もうルート名もありません。 URLに反映されていない他のデータを渡す必要がある場合は、共有サービスを使用してください。 –

+0

duh! 'Some'コンポーネントに使用するデータサービスを伝えるためのサービスが必要です。そうしても、「Some」によって使用されるデータサービスを設定する最後のコンポーネントがどれか分かりますか?デバッグの悪夢。反対側では、メディエーターが助けてくれるかもしれませんが、私はそれを完全に不要な複雑さと見ています。 – RoninCoder

関連する問題