2016-09-15 67 views
0

我正在使用angular rc2並且有一個關於route resolve guard的問題。angular2 route resolve gaurd - 如何將變量傳遞給服務

這是我的解決方案服務。它工作正常。

import { Injectable } from '@angular/core'; 
import { Router, Resolve, ActivatedRouteSnapshot } from '@angular/router'; 
import { Observable } from 'rxjs/Observable'; 
import { ApiService } from '../api_service/api.service'; 
import 'rxjs/add/operator/take'; 
import { BasicSetup } from './basic_setup' 
@Injectable() 
export class BasicSetupResolve implements Resolve<any> { 

    constructor(private _apiService: ApiService, private router: Router) {} 



    resolve(route: ActivatedRouteSnapshot): Observable<any> | Promise<any> | any { 
     let id = route.params['id']; 
     let model_id = id; 
     let endpoint='/test/model/basic'; 
     return new Promise((resolve) => { this._apiService.getModel(endpoint,model_id,false).subscribe(api_object => { 
       if (api_object) { 
        return resolve(api_object); 
       } else { // id not found 
        this.router.navigateByUrl('/dashboard(content:models/basic/' + model_id +')'); 
        return false; 
       } 
       }); 

     }); 
     } 
    } 

這裏是我的app.route.ts

{ path: 'models/basic/:id', component: mesaBasicComponent,canActivate: [AuthGuard], resolve: {results: BasicSetupResolve},outlet:'content' }, 

我需要通過一個變量來讓更多的動態,因爲端點別人改變我將不得不作出一個單獨的服務爲每個端點:

let endpoint='/test/model/basic'; 

我會如何將它傳遞給服務?

+0

如何傳遞數據對象,從解析服務獲取呢? – micronyks

+0

但如何?似乎我必須從路由解析:{results:BasicSetupResolve}將看起來像什麼? – Tampa

回答

3

您可以將數據傳遞給解析器:

在你的路由配置

{ 
    path: 'your-path', 
    component: YourComponent, 
    data: { 
    someKey: 'someValue', 
    }, 
    resolve: { 
    someKey: YourResolver 
    }, 
} 

在您的解析器

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

    // ... 

    resolve(route:ActivatedRouteSnapshot):Observable<any> | Promise<any> | any { 

    console.log(route.data['someKey']); 

    // ... 
    } 
}