5

私は AngularJS + UI Bootstrapによって提供される「モーダル」ディレクティブを使用しています。モーダル ダイアログ ボックスはうまく機能しますが、1 つ問題があります。それは、URL が変更されないことです。

たとえば、私の AngularJS アプリには、"/people" のルートが設定されており、人のリストが表示されます。ユーザーが人をクリックすると、モーダル ダイアログ ボックスが表示され、詳細情報が表示されます。実際に $routeProvider にコントローラーを再実行させずに URL を変更する方法を見つけようとしています。

たとえば、ルートに次のようなものを含めることができます。

$routeProvider.
when('/people', {controller: PeopleCtrl, templateUrl: 'templates/people.html'}).
when('/people/:personId', {controller: PeopleCtrl, templateUrl: 'templates/people.html'}).

次に、PeopleCtrl で次のことができます。

if ($routeParams.personId) {
    $scope.editPerson({id: $routeParams.personId});
}

これは基本的に、人の行を ng-click でバインドするのと同じ関数を呼び出します。これは、アプリが /people/123 のような URL に応答できるようにするという点では機能しますが、URL を /people から /people/123 にジャンプさせ、モーダルとして /people に戻す方法がわかりません。ダイアログボックスが開閉します。

明らかに、私は単に $location.path("/people") を呼び出すことができますが、それに関する問題は PeopleCtrl が再実行されることであり、モーダルの「背後」の状態を保持する必要があるため、それを避けたいと考えています。

つまり、通常の $routeProvider の変更が検出されずに URL/場所を変更する方法を探しています。

ありがとう!

4

1 に答える 1

5

私が探していたものを正確に実行する別のSO投稿を見つけました:

function MyCtrl($route, $scope) {
    var lastRoute = $route.current;
    $scope.$on('$locationChangeSuccess', function(event) {
        $route.current = lastRoute;
    });
}
于 2013-07-04T00:46:55.987 に答える