0

サービス呼び出しを利用してリダイレクトすることのみを目的とするルートを構成する最良の方法は何だろうか。

私は現在このハックを使用しています:

$routeProvider.when('/talks', { 
    template: '<div></div>', 
    controller: ['dateService', '$location', function(dateService, $location){
        var nextTalk = dateService.getNextTalkDate();
        $location.path('talks/' + nextTalk.format('MM') + '/' + nextTalk.format('YYYY'));
    }]
});

現在controller、サービスに依存するインラインコントローラーの実装に構成を設定し、それを実行してリダイレクトします。

templateただし、コントローラーがまったく呼び出されないため、ダミーの値を設定する必要があるため、少し奇妙に感じます。

controller意図しない何かのためにプロパティを強調しているように感じます。

ルート上のサービスにアクセスできるビューに関係のないコードを実行する方法が必要だと思います。私は自分自身を正すことができ$routeProviderたと思いますが、それは私が組み込むべきだと考えるものには少し重いようです.

4

2 に答える 2

1

ルートのどこかにサービスを挿入する方法はありません。であろうとなかろうとredirectTotemplateそこにあるコードはモジュールレベルで処理されます。これは、モジュールが最初にロードされ、アプリケーションが自身をブーストしたときに、サービスとインジェクション レベルのコードが実行されることを意味します。したがって、これcontrollerが最善の策です (これはインジェクションをサポートするためです)。

Controller は AngularJS の多くの領域で使用されており、あなたがしようとしていることに対してうまく動作するはずです。そこで行うようにリダイレクトを処理するか、同じコントローラー (ページを作成する場所) を指す 3 つの異なるルートをセットアップすることができます。

var handler = { controller : 'Ctrl' };
$routeProvider.when('/talks', handler).
               when('/talks/:month, handler).
               when('/talks/:month/:year', handler);

そして、リダイレクトを使用することになった場合は、単に使用して$location.path(url).replace()ください。これにより、履歴スタックが 1 レベル戻るため、リダイレクトをトリガーする URL が履歴に残りません。

于 2013-03-31T23:42:14.863 に答える