30

Ok。ユーザーをログアウトするためのURLを設定しました。サーバーには、html はありません。サーバー上のセッションは単に破棄され、ユーザーはアドレスにリダイレクトされます。

これはプレーンな html では問題なく動作しますが、Angular では問題が発生しています。を使用してすべての主要なルートをルーティングしてきましたが$routeProvider.when('/foo', {templateUrl: '/foo.html', controller: 'Ctrl'})、通常のテンプレート化されたルートでは正常に機能します..ただし、テンプレートがない場合は機能しません。

/logoutでは、 html テンプレートがない場合、上記と同じ方法でルートをサポートするにはどうすればよいでしょうか?

4

2 に答える 2

59

template回避策は、の代わりにを使用することですtemplateUrlAngularドキュメントから:

template – {string =} –ngViewまたはngIncludeディレクティブで使用される文字列としてのhtmlテンプレート。このプロパティはtemplateUrlよりも優先されます。

これは次のように使用できます。

$routeProvider.when("/foo", {template: " ", controller: "Ctrl"});

注:Angularはコントローラーを起動する前にチェックを使用し、空の文字列はfalseと評価されるため" "、空の文字列の代わりに使用する必要があります。""if (template)

- 編集 -

それを行うためのより良い方法は、resolveマップを使用することです。AngularDocsを参照してください:

resolve-{Object。=}-コントローラーに注入する必要がある依存関係のオプションのマップ。

これは次のように使用できます。

$routeProvider.when('/foo', {resolve: {redirect: 'RedirectService'}});

注:質問で説明しているのは実際にはAngularの意味での「コントローラー」ではないため、「Ctrl」から「RedirectService」に変更しました。ビューのスコープは設定されません。代わりに、それはリダイレクトすることになるサービスのようなものです。

于 2013-01-19T07:16:06.423 に答える
9

すでに受け入れられている回答と、コメントに記載されているgithubの問題に基づいてソリューションを書いています。


私が使用しているアプローチはresolve$routeProvider. 私の場合、ユーザーが/logoutに移動したときに、アプリケーションでログアウトするための優れたソリューションを作成しようとしていました。

のコード例$routeProvider:

app.config(['$routeProvider', function ($routeProvider) {
    $routeProvider.
        ...
        when('/logout', {
            resolve: {
                logout: ['logoutService', function (logoutService) {
                    logoutService();
                }]
            },
        }).
        ...
}]);

解決部分では、名前でサービス (ファクトリ) を指定し、後でそれ呼び出す必要があります。それでも、それは最も素晴らしい解決策です。

例を完成させるために、以下を提示しますlogoutService

angular.module('xxx').factory('logoutService', function ($location, Auth) {
    return function () {
       Auth.setUser(undefined);
       $location.path('/');
    }
});

よく働く!

于 2015-07-23T12:54:11.030 に答える