我有以下服务:
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
的错误。我很难过。是否有一些推荐或简单的方法,我错过了?
答案 0 :(得分:1)
我认为您需要在其提供程序属性中的组件级别(涉及路由)中指定此服务,而不是在引导应用程序时:
@Component({
(...)
providers: [ QService]
})
export class...
事实上,RouteParams仅适用于组件的上下文,而不适用于应用程序的全局。因此,应用程序注入器不了解此提供程序,因为它仅存在于子注入器中(组件1)。
这与依赖注入和分层注入器相关联。有关详细信息,请参阅此问题: