ionic2您如何提供/@注入opaquetoken



我有以下代码提供/注入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不会正确地将查询字符串发送到运行时,但实际上这不是问题。

您有圆形依赖。

DEBUGprovideDebug移动到分离的文件,例如debug.ts第二个错误在这里:

deps: [Window]

您的配置中没有Window提供商。使用 deps: ['Window']取而代之的是将提供商定义为字符串

 providers: [
   { provide: 'Window',  useValue: window },
   { provide: DEBUG, useFactory: provideDebug, deps: ['Window'] }  
 ]

更新了plunker

相关内容

  • 没有找到相关文章

最新更新