Angular UrlResolver не переопределяется пользовательским провайдером

1

У меня есть приложение с угловым выражением, в котором я хотел бы использовать пользовательский поставщик 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 {}
Теги:
angular
web
angular-providers

1 ответ

2
Лучший ответ

Вы должны предоставить свой пользовательский UrlResolver как часть providers в CompilerOptions при загрузке приложения:

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

Пример плунжера

  • 0
    Благодаря Юрзуи, я вижу по Плункеру именно то, что я пытался сделать. К сожалению, документация в этой области очень тонкая!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню