Angular UrlResolver未被自定义提供程序

时间:2017-10-04 13:37:23

标签: javascript angular web angular-providers

我有一个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 {}

1 个答案:

答案 0 :(得分:2)

在引导应用时,您应该在UrlResolver中提供自定义providers作为CompilerOptions的一部分:

platformBrowserDynamic().bootstrapModule(AppModule, { 
  providers: [{ provide: UrlResolver, useClass: NewUrlResolver 
}]})

<强> Plunker Example