我有以下代码提供/注入OpaqueToken
,但是当我尝试使用它时,我会遇到错误。VM4745:24 Error: (SystemJS) Can't resolve all parameters for HomePage: (NavController, ?).
app.module.ts
import { NgModule, ErrorHandler, OpaqueToken } from '@angular/core';
// ...
export const DEBUG = new OpaqueToken("debug");
export function provideDebug(window: Window){
if (~window.location.search.toLocaleLowerCase().indexOf("debug=true")){
return true;
}
return false;
}
@NgModule({
// ...
providers: [
{ provide: 'Window', useValue: window }
, { provide: DEBUG, useFactory: provideDebug, deps: [Window] }
]
})
home.ts
import { Component, Inject } from '@angular/core';
import { DEBUG } from './app.module';
// ...
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
constructor(
@Inject(DEBUG) isDebug: boolean,
@Inject(Window) window: Window
) {
console.log("DEBUG=", isDebug);
}
}
这是一个plunkr:http://plnkr.co/edit/6n1fkqpps8vbknwpkjqw1?debug=true&p = preview
解决方案这是基于下面答案的OpaqueToken
(来自其他文件)的解决方案(来自其他文件),并注入window
对象。
plunker
注意:Plunker不会正确地将查询字符串发送到运行时,但实际上这不是问题。
您有圆形依赖。
将DEBUG
和provideDebug
移动到分离的文件,例如debug.ts
第二个错误在这里:
deps: [Window]
您的配置中没有Window
提供商。使用 deps: ['Window']
取而代之的是将提供商定义为字符串
providers: [
{ provide: 'Window', useValue: window },
{ provide: DEBUG, useFactory: provideDebug, deps: ['Window'] }
]
更新了plunker