Angular params

Wer in einer Angular auf die params des Routers zugreiffen will, der muss sich in am Observable router.params einschreiben. Benötigt man jedoch sowohl die params, wie auch die queryParams, muss man sich plötzlich bei zwei Observalbe einschreiben. Das kann zu Problemen führen. Über Observable.combineLatest können die beiden Observable kombiniert werden. Das Resultat ist ein Array von params Objects. Per Object.assign() werden diese kombiniert und sind danach wie gewohnt zugänglich.

export class ExampleComponent implements OnInit, OnDestroy {

    /**
     * Parameter subscriber
     */
    private paramSubscriber: any;

    /**
     * Search service subscriber
     */
    private searchServiceSubscriber : any;

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

    ngOnInit() {
        // combine the two observable
        this.paramSubscriber = Observable.combineLatest(
            this.route.params,
            this.route.queryParams
        ).subscribe((params) => {
            // reduce the array of objects to one single object
            let tes = Object.assign({},...params);
            this.query = tes['query'];
            this.extend = tes['extend'];
            this.category = tes['category'];
            // call search service
            this.searchServiceSubscriber = this.searchService.getPosts(this.category, this.query,  this.extend).subscribe((posts) => this.posts = posts);
        });
    }
    ngOnDestroy() {
        this.paramSubscriber.unsubscribe();
        this.searchServiceSubscriber.unsubscribe();
    }
}