2017-10-04 2 views
1

J'ai une application Angular dans laquelle j'aimerais utiliser un fournisseur UrlResolver personnalisé afin d'ajouter une logique de rupture de cache, comme vu dans cette question (https://stackoverflow.com/a/43289767/868914).Angular UrlResolver n'est pas remplacé par le fournisseur personnalisé

Cependant, il ne semble pas que je puisse remplacer le compilateur par défaut UrlResolver en utilisant un fournisseur, comme je le ferais normalement et comme le suggère le lien ci-dessus.

Voici un plunker montrant ce que je veux dire: https://plnkr.co/edit/zFsdyfNIoPcmbLO7WafW?p=preview

Si vous utilisez le chrome (ou d'autres bonnes) outils de dev débogueur pour afficher la source pour compiler.umd.js et rechercher le UrlResolver et mettre une pause Dans la méthode 'resolve', vous pouvez voir que l'implémentation par défaut est utilisée à la place de la classe fournie.

Je ne peux pas trouver une raison pour cela, j'espère que quelqu'un ici connaît une raison/solution?

Heres code app.module (comme on le voit sur la plunkr aussi)

//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 {} 

Répondre

2

Vous devez fournir votre commande UrlResolver dans le cadre de providers dans CompilerOptions lorsque l'application bootstraping:

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

Plunker Example

+0

Merci Yurzui, je peux voir à partir du Plunker qui est exactement ce que je essayait de faire. La documentation est malheureusement très mince dans ce domaine! –