2017-04-10 73 views
1

我不明白为什么以下不起作用。如果我使用文字字符串来分配APP_BASE_HREF,它可以正常工作。使用另一个InjectionToken提供InjectionToken

main.ts

export function main(baseHref: string) { 
    platformBrowserDynamic([ 
     { provide: MY_BASE_HREF, useValue: baseHref }, 
    ]).bootstrapModule(AppModule); 
} 

app.module.ts

export const MY_BASE_HREF = new InjectionToken<string>('BaseHref') 

@NgModule({ 
... 
providers: [{ provide: APP_BASE_HREF, useValue: MY_BASE_HREF }], 
... 
}) 

这里是控制台错误

Unhandled Promise rejection: url.replace is not a function ; Zone: <root> ; Task: Promise.then ; Value: TypeError: url.replace is not a function at _stripIndexHtml (node_modules/@angular/common/bundles/common.umd.js:439) at new Location (node_modules/@angular/common/bundles/common.umd.js:278)

的重要组成部分

我不能使用InjectionToken来定义另一个InjectionToken吗?

+0

什么是你的问题的是什么? –

回答

1

至于我记得这应该做你想要

providers: [{ provide: APP_BASE_HREF, useFactory: (url) => url, deps: [MY_BASE_HREF]}], 
+0

我正在使用InjectionToken,而不是OpaqueToken。我认为其中一个优点是不必调用'new Inject()'... – gravidThoughts

+0

你从哪里得到这些信息?你尝试过,如果它的作品? –

+0

我从[Thistram]的这篇文章中获得了它(https://blog.thoughtram.io/angular/2016/05/23/opaque-tokens-in-angular-2.html#injectiontoken-since-angular-4x) 。不,它不工作,在JavaScript控制台中产生相同的错误。 – gravidThoughts

相关问题