У меня есть приложение с угловым выражением, в котором я хотел бы использовать пользовательский поставщик UrlResolver, чтобы добавить логику логики кэширования, как видно из этого вопроса (qaru.site/questions/6870834/...).
Однако, похоже, я не могу переопределить компилятор UrlResolver по умолчанию с помощью поставщика, как я обычно делал бы, и, как видно из вышеприведенной ссылки.
Вот плункер, показывающий, что я имею в виду: https://plnkr.co/edit/zFsdyfNIoPcmbLO7WafW?p=preview
Если вы используете отладчик chrome (или другого хорошего) dev, чтобы просмотреть источник для compiler.umd.js и выполнить поиск UrlResolver и поместить разрыв в методе "разрешить", вы можете увидеть, что реализация по умолчанию используется вместо мой предоставленный класс.
Я не могу найти причину этого, надеюсь, кто-то здесь знает причину/решение?
Код Heres 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 {}
Вы должны предоставить свой пользовательский UrlResolver
как часть providers
в CompilerOptions
при загрузке приложения:
platformBrowserDynamic().bootstrapModule(AppModule, {
providers: [{ provide: UrlResolver, useClass: NewUrlResolver
}]})