1

私はthis partに立ち往生したときに、角型2 tutorial(TypeScript内)で作業していました。彼らは今、テンプレートを別々のファイルに分けたいと思っています。それはうまくやっているけど、奇妙なセットアップがあります。私はASP.NET MVCでファイルを提供しています。Viewsフォルダからファイルを提供することを拒否しています。十分に十分です:私はRazor(.cshtml)ファイルを提供する必要があることを期待しています。ただホワイトリストのHTMLの代わりにこれを試してハックしようと思います。UrlResolverをオーバーライド

これまでAngular 1で作業していましたが、decoratorを使用して$templateRequest serviceを修正して、テンプレートURLをMVCが受け入れるものに変更して、対応するファイルを提供するようにMVCを設定しました。もし私が自分自身を言うなら、かなり賢い仕事。だから私は角2でこれを複製する必要があります。それは簡単でなければならない。

間違っています。間違っている。グーグルの推測の後、私が確認したクライアントサイドのデバッグの後に、私が拡張したいクラスであるUrlResolverが見つかりました。ドキュメントは、

とも言います。このクラスは、カスタム動作を作成するためにアプリケーション開発者によってオーバーライドできます。

はい!これはまさに私がやりたいことです。残念ながら、それを上書きする方法の例は提供されていません。私はこのDemoUrlResolverとこのMyUrlResolverを見つけましたが、どのように動作するのか、どちらが動作するのかわかりません。私はブートストラップとプロバイダ(モジュールとアプリケーションコンポーネント上)を含む私のカスタムプロバイダ(this answer参照)を提供するための複数のアプローチを試してみました。

UrlResolverをオーバーライドするにはどうすればよいですか?

は、私はそれは問題ではありませんと仮定し、現時点では私の拡張子は何もしませんが、基本クラスに延期:

class MvcUrlResolver extends UrlResolver { 
    resolve(baseUrl: string, url: string): string { 
     return super.resolve(baseUrl, url); 
    } 
} 

答えて

1

興味深い質問を。それはコンパイラの一部であるため、他のアプリケーションコンポーネントと一緒にインスタンス化されないことが理にかなっています。 platformBrowserDynamic()の呼び出しで直接提供する必要があります。この場合、デフォルトのコンパイラオプションにマージされ、コンパイラをインスタンス化するインジェクタによって使用されます。

import { COMPILER_OPTIONS } from '@angular/core'; 

class MvcUrlResolver extends UrlResolver { 
    resolve(baseUrl: string, url: string): string { 
     let result = super.resolve(baseUrl, url); 
     console.log('resolving urls: baseUrl = ' + baseUrl + '; url = ' + url + '; result = ' + result); 
     return result; 
    } 
} 

platformBrowserDynamic([{ 
    provide: COMPILER_OPTIONS, 
    useValue: {providers: [{provide: UrlResolver, useClass: MvcUrlResolver}]}, 
    multi: true 
}]).bootstrapModule(AppModule); 
+0

私はあなたが '@ angle/core'; 'から' import {COMPILER_OPTIONS}を含むと仮定します。あなたは、素晴らしいです。私は最近、難しい質問がたくさんあると感じています。これはしばらくの間、最初の良い答えでした。 – ricksmt

+0

@ricksmt、正しい、それは@ angular/coreからです。私は私の答えを更新しました。 –

関連する問題