1

我有一个 Angular 应用程序,我想在其中使用自定义 UrlResolver 提供程序来添加一些缓存中断逻辑,如本问题所示(https://stackoverflow.com/a/43289767/868914)。

但是,我似乎无法使用提供程序覆盖默认编译器 UrlResolver,就像我通常会做的那样,正如上面的链接所暗示的那样。

这是一个显示我的意思的 plunker:https ://plnkr.co/edit/zFsdyfNIoPcmbLO7WafW?p=preview

如果您使用 chrome(或其他好的)开发工具调试器来查看 compiler.umd.js 的源代码并搜索 UrlResolver 并在“resolve”方法中放置一个中断,您可以看到正在使用默认实现而不是我提供的课程。

我找不到原因,希望这里有人知道原因/解决方案?

这是 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 {}
4

1 回答 1

2

您应该在引导应用程序时提供您的自UrlResolver定义内容:providersCompilerOptions

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

Plunker 示例

于 2017-10-04T18:54:39.003 回答