angular2 route resolve gaurd - 如何将变量传递给服务

时间:2016-09-15 03:06:52

标签: angular

我正在使用角度rc2,并对路线解除警卫有疑问。

这是我的解决服务。它工作正常。

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'; 

我如何将其传递给服务?

1 个答案:

答案 0 :(得分: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']);

    // ... 
  }
}