2016-05-06 9 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; 
} 

eg Comp1 но есть 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{ 

} 

Как вы уже догадались, есть много услуг передачи данных, которые реализуют IDataServiceSome и много компонентов, что путь к Some. Выбор того, какая служба данных используется, исходит от любого компонента, который направляется на компонент Some, используя маркер данных, известный как injector. С выпуском 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'}} 

и доступ к нему с помощью

this.route.snapshot.data 

или

this.route 
     .data 
     .subscribe(v => console.log(v)); 

Смотри также Plunker на https://github.com/angular/angular/issues/9757#issuecomment-229847781

оригинальный

Параметры могут передаваться как:

  • со ссылкой маршрутизатора
<a [routerLink]="['/crisis-center', {bar: 'foo1'}]">Crisis Center</a> 
  • с router.navigate()
this.router.navigate(['/crisis-center', {bar: 'foo2'}]); 

Plunker example

app/app.component.ts содержит ссылки и код, в котором передаются параметры, app/crisis-center/crisis-center.coomponent.ts содержит код, где параметр считывается и записывается в консоль.

Я не думаю, что есть дополнительная информация для дополнительных данных.

+0

Но не поддерживает 'data' означает, что вы должны либо использовать строки запроса или маршрутные параметры. Оба они являются частью примера «тур по героям». В моем случае я не хочу, чтобы пользователь видел токен службы данных как часть URL-адреса, и для этого нет причин. Поэтому я не совсем понимаю, почему «данные» удалены. – RoninCoder

+0

Маршруты - это просто URL и имя компонента. Также нет имен маршрутов. Если вам нужно передать другие данные, которые не отражены в URL-адресе, просто используйте общую службу. –

+0

duh! так что вам понадобится услуга, чтобы сообщить компоненту 'Some' какую службу данных использовать? даже при этом, насколько сложно определить, какой компонент был последним, который установил службу данных, которая будет использоваться 'Some'? отлаживающий кошмар. С другой стороны, посредник может помочь, но я полностью вижу в нем ненужную сложность. – RoninCoder