在Angular 2中的服务中使用RouteParams

时间:2016-03-18 22:31:15

标签: angular

我有以下服务:

import {Injectable} from 'angular2/core';
import {Router, RouteParams} from 'angular2/router';

@Injectable()
export class QService {
  /* A service to handle a query (q) in the search string.
   */
  constructor(
      private _router:Router,
      routeParams:RouteParams
    ) {
    /* Set this._q from the search string.
     */
    this._q = routeParams.get('q');
  }

  private _q:string
  get q():string {
    return this._q;
  }
  set q(q:string) {
    this._q = q;
    // TODO Add q back to the search string.
  }
}

不幸的是,无论我如何使用此服务,我都会遇到No provider for RouteParams的错误。我很难过。是否有一些推荐或简单的方法,我错过了?

1 个答案:

答案 0 :(得分:1)

我认为您需要在其提供程序属性中的组件级别(涉及路由)中指定此服务,而不是在引导应用程序时:

@Component({
  (...)
  providers: [ QService]
})
export class... 

事实上,RouteParams仅适用于组件的上下文,而不适用于应用程序的全局。因此,应用程序注入器不了解此提供程序,因为它仅存在于子注入器中(组件1)。

这与依赖注入和分层注入器相关联。有关详细信息,请参阅此问题: