2017-10-04 101 views
1

我有一個Angular應用程序,我想使用自定義的UrlResolver提供程序來添加一些緩存中斷邏輯,如在此問題(https://stackoverflow.com/a/43289767/868914)中所見。Angular UrlResolver未被自定義提供者覆蓋

但是,我似乎沒有像使用提供程序那樣覆蓋默認編譯器UrlResolver,正如我通常所做的那樣,並且正如上面的鏈接所暗示的。

下面是一個plunker顯示我的意思:https://plnkr.co/edit/zFsdyfNIoPcmbLO7WafW?p=preview

如果您使用的鍍鉻(或其他好)開發工具調試器來查看源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 {} 

回答

2

的Bootstrap應用程序時,你應該提供您的自定義UrlResolver如在CompilerOptionsproviders部分:

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

Plunker Example

+0

謝謝Yurzui,我可以從Plunker看到,這正是我試圖去做。不幸的是,該文檔中的文檔非常薄弱! –