私はOpaqueToken
を提供/注入する次のコードを持っていますが、使用しようとするとエラーが発生します。 VM4745:24 Error: (SystemJS) Can't resolve all parameters for HomePage: (NavController, ?).
ionic2どのように/ @ Ina OpaqueTokenを提供しますか?
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/6N1FKQpS8vbKnwPKJQW1?debug=true&p=preview
ソリューション はここです(別のファイルからの)OpaqueToken
を注入するためのソリューションと、以下の答えに基づいてwindow
オブジェクトも注入します。
注:plunkerが正しく実行時にクエリ文字列を送信しませんが、実際には、これは問題になりません。
としてプロバイダに定義されている 'debug.ts'が問題を解決するが、これは循環依存である理由私は不明です。説明できますか?また、私は 'window'に' window :: location'へのアクセスを与えるような '{provide: 'Window'、useValue:window}'行を '' Window''に挿入しようとしていましたが、更新されたPlunkerで動作するようですが、href = 'http:// run.plnkr.co/vAabzuRXur4BTnVL /' – michael
'app.module.ts => homepage.ts => app.module.ts'です。 homepage.tsに 'console.log(DEBUG);'を入れてみると、 'undefined'であることがわかります – yurzui
が見つかりました。次へ:JSウィンドウオブジェクトを挿入するにはどうすればいいですか?私はそれがレシピだと思った... – michael