我有一个Angular应用程序,我想在其中使用自定义UrlResolver提供程序来添加一些缓存中断逻辑,如此问题(https://stackoverflow.com/a/43289767/868914)中所示。
然而,我似乎无法使用提供程序覆盖默认编译器UrlResolver,正如我通常所做的那样,正如上面的链接所示。
这是一个显示我的意思的掠夺者:https://plnkr.co/edit/zFsdyfNIoPcmbLO7WafW?p=preview
如果您使用chrome(或其他好的)开发工具调试器来查看compiler.umd.js的源代码并搜索UrlResolver并在“解决方案”中放置一个中断区域。方法,您可以看到正在使用默认实现而不是我提供的类。
我找不到理由,希望有人在这里知道原因/解决方案吗?
下载app.module代码(也可以在plunkr上看到)
//our root app component
import {Component, NgModule, VERSION} from '@angular/core';
import {BrowserModule} from '@angular/platform-browser';
import { UrlResolver } from "@angular/compiler";
@Component({
selector: 'my-app',
templateUrl: 'my-app.html',
})
export class App {
name:string;
constructor() {
this.name = `Angular! v${VERSION.full}`
}
}
class NewUrlResolver extends UrlResolver {
resolve(baseUrl: string, url: string): string {
console.log("Custom resolve");
return "rubbish";
}
}
@NgModule({
imports: [ BrowserModule ],
providers: [{
provide: UrlResolver, useClass: NewUrlResolver
}]
declarations: [ App ],
bootstrap: [ App ]
})
export class AppModule {}
答案 0 :(得分:2)
在引导应用时,您应该在UrlResolver
中提供自定义providers
作为CompilerOptions
的一部分:
platformBrowserDynamic().bootstrapModule(AppModule, {
providers: [{ provide: UrlResolver, useClass: NewUrlResolver
}]})
<强> Plunker Example 强>