2017-07-03 18 views
0

私はC#ヘルパーを使ってビューを構築し、angular2はコントローラを呼び出してC#によって生成されたビューのhtmlを受け取ることでこのビューを消費します。 しかし、私の問題は、ユーザーがビューにアクセスする権限がなく、コントローラーが401 Unautorizedを返すときにエラーが発生し、テンプレートの読み込みに失敗し、キャッシュをクリアして有効な権限で再ロードするまでコンポーネントが壊れてしまいます。templateUrlがangular2で有効かどうかを確認するにはどうすればよいですか?

コンポーネントを読み込む前に、どうやってtemplateUrlを検証できますか?

+0

たぶん、あなたはあなたのユーザーがルートにアクセスする権利を有することを確認するためにガードを使用することができます。たとえば、ユーザーが特定のコンポーネントをロードしているルートにアクセスしようとすると、サーバーを呼び出してユーザーがテンプレートにアクセスできるかどうかを確認します。 もし彼が権利を持っていれば、ルートはアクティブになり、そうでなければ、他の場所にリダイレクトされます。この方法では、壊れた状況があってはなりません。 –

+0

@AlexBeugnet角度のtemplateUrlがロードされた後にガードイベントが実行されるため、これを行うことはできません。 – Carlinhos

+0

これは変わったようです...テンプレートは、ルートがアクティブになったときにのみ読み込まれます。そして、ガードが解決されない場合、あなたはルートに到達すべきではありません... –

答えて

0

私はtemplateUrlを呼び出して正しい文字列urlを返す関数を作成することで問題を解決しました。

function hasTemplate(template: string) { 
 
    var http = new XMLHttpRequest(); 
 
    http.open('GET', template, false); 
 
    http.send(); 
 
    return (http.status === 200) ? template : '/view/home/error/'; 
 
} 
 

 
export const getViewUrl = <TModel>(modelo: { new(): TModel }, tipo: string) => { 
 
    //Url to call web service and verify the response 
 
    let url = `/view/${modelo.name.toLowerCase()}/${tipo}`; 
 
    return hasTemplate(url); 
 
}; 
 

 
@Component({ 
 
    selector: 'cidade-list', 
 
    templateUrl: getViewUrl(Cidade, 'list'), 
 
    styleUrls: [CssPath], 
 
    providers: [ 
 
     CidadeService, 
 
    ] 
 
}) 
 

 
export class CidadeListComponent {}

関連する問題