używane mieć, z przestarzałej routera, kilka elementów, które kierowane do tej samej części:Angular2 RC1, nowy router i przekazywanie danych
Niektóre Komponent
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;
}
np. Comp1 ale istnieją Comp2, KOMP3, etc ...
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{
}
Jak można się domyślić, istnieje wiele usług transmisji danych, które implementują IDataServiceSome
i wiele składników, które trasa do Some
. Wybór usługi przesyłania danych pochodzi z dowolnego komponentu, który prowadzi do komponentu Some
przy użyciu tokena danych znanego pod numerem injector
. Wraz z wydaniem rc1 i nowym routerem, RouteData
jest przestarzałe lub usunięte, ale w jaki sposób jest realizowany ten scenariusz do przodu?
Ale nie wspiera 'data' oznacza, że albo trzeba użyć parametrów ciąg kwerendy lub trasy. Oba są częścią przykładu "wycieczki bohaterów". W moim przypadku tak naprawdę nie chcę, aby użytkownik zobaczył token usługi danych jako część adresu URL i nie ma ku temu powodu. Więc nie do końca rozumiem, dlaczego 'dane' jest usuwany. – RoninCoder
Trasy są po prostu adresem URL i nazwą komponentu. Nie ma również żadnych nazw tras. Jeśli chcesz przekazać inne dane, które nie są odzwierciedlone w adresie URL, skorzystaj z usługi udostępnionej. –
duh! więc potrzebujesz usługi, aby powiedzieć komponentowi 'Some', jakiej usługi danych użyć? nawet robiąc to, jak trudno jest ustalić, który komponent był ostatnim, który ustawił usługę danych, która ma być używana przez 'Some'? debugowanie koszmaru. Z drugiej strony mediator może pomóc, ale całkowicie uznaję to za niepotrzebną złożoność. – RoninCoder