2016-08-21 26 views
22

Açısal 2 RC.5'in serbest bırakılmasından sonra yönlendirici çözümüyle karşılaşıldı. Here, Promise ile örnek gösterdi, Gözlemlenebilir ile sunucuya istekte bulunursam aynısını nasıl yapabilirim?Açısal 2 yönlendirici ile Gözlemlenebilir

search.service.ts

... 
searchFields(id: number) { 
    return this.http.get(`http://url.to.api/${id}`).map(res => res.json()); 
} 
... 

arama-resolve.service.ts

import { Injectable } from '@angular/core'; 
import { Router, Resolve, ActivatedRouteSnapshot } from '@angular/router'; 
import { Observable } from 'rxjs/Observable'; 

import { SearchService } from '../shared'; 

@Injectable() 
export class SearchResolveService implements Resolve<any> { 

    constructor(
    private searchService: SearchService , 
    private router: Router 
) {} 

    resolve(route: ActivatedRouteSnapshot): Observable<any> | Promise<any> | any { 
    let id = +route.params['id']; 
    return this.searchService.searchFields(id).subscribe(fields => { 
     console.log('fields', fields); 
     if (fields) { 
     return fields; 
     } else { // id not found 
     this.router.navigate(['/']); 
     return false; 
     } 
    }); 
    } 
} 

search.component.ts

ngOnInit() { 
    this.route.data.forEach((data) => { 
    console.log('data', data); 
    }); 
} 

yerine gerçek verilerin Object {fields: Subscriber} alın.

+0

Lütfen, ne denediğinizi gösteren kodu gönderin. –

+1

Kod örnekleri ile ilgili bir soru güncelledik – neilhem

cevap

41

Hizmetinizde subscribe()'u arama ve bunun yerine rotanın abone olmasına izin verme.

değiştirme

return this.searchService.searchFields().subscribe(fields => { 

import 'rxjs/add/operator/first' // in imports 

return this.searchService.searchFields().map(fields => { 
    ... 
}).first(); 

(subscribe() tarafından döndürülen) bir Observable yerine Subscription arasında döndürülür Bu yolu.

Şu anda yönlendirici kapatılabilir görünmesini bekler. İlk değer verildikten sonra first() operatörünü kullanarak kapandığından emin olabilirsiniz.

+0

Teşekkürler Günter. Gözlenebilir bir geri dönüşü elde etmenin bir yolunu arıyordum. '.map' anlamlıdır. Ancak şimdi, çözümleyicimde '.map' kullanıyorum, rota asla çözümlenmiyor. Çözümleyicimdeki '.map' işlevine giriyorum ve veriyi orada görüyorum, ancak bileşenimden hiçbir zaman ngOnInit almam. Çözümleyicim buna benziyor: this.eventService.getEvents(). Map (events => events) 'i döndür ve rotam şunun gibi görünüyor: ...: {events: EventListResolver}} '. Yanlış yaptığım belli bir şeyi görüyor musun? –

+2

@JimCooper Şu anda yönlendirici kapatmak için gözlemlenebilir bekler. 'Take()' operatörünü kullanarak ilk değer yayıldıktan sonra kapandığından emin olabilirsiniz. Görevimi güncelledim. –

+1

Ahh, bu mantıklı. Ayrıca, 'getEvents()' yöntemimin gözlemlenebilir dizilimimi sonlandırdığından emin olarak da düzeltebilirim (yani, tamamlama tetikleniyor). Teşekkürler! –

İlgili konular