AngularJS $location がパスを変更しない 質問する

AngularJS $location がパスを変更しない 質問する

フォームが送信された後にページの URL を変更する際に問題が発生します。

私のアプリのフローは次のとおりです。

  1. ルートが設定され、URL が何らかのフォーム ページに認識されます。
  2. ページが読み込まれ、コントローラーが変数を設定し、ディレクティブが実行されます。
  3. AJAX を使用して特別なフォーム送信を実行する特別なフォーム ディレクティブが起動されます。
  4. AJAX が実行された後 (Angular は AJAX を処理しません)、コールバックが起動され、ディレクティブは$scope.onAfterSubmit場所を設定する関数を呼び出します。

問題は、場所を設定しても何も起こらないことです。場所パラメータも設定してみましたが/...ダメでした。フォームを送信しないことも試しました。何も機能しません。

コードがonAfterSubmit関数に到達するかどうかをテストしました (実際に到達しています)。

私が唯一考えたのは、関数のスコープが何らかの形で変更される (ディレクティブから呼び出されるため) ということだけですが、onAfterSubmitスコープが変更された場合、どのように呼び出すことができるのでしょうか?

これが私のコードです

var Ctrl = function($scope, $location, $http) {
  $http.get('/resources/' + $params.id + '/edit.json').success(function(data) {
    $scope.resource = data;
  });

  $scope.onAfterSubmit = function() {
    $location.path('/').replace();
  };
}
Ctrl.$inject = ['$scope','$location','$http'];

誰か助けてくれませんか?

ベストアンサー1

数日前にも同じような問題がありました。私の場合、問題はサードパーティのライブラリ (正確には jQuery) を変更したことで、この場合、関数の呼び出しや変数の設定は機能するのですが、Angular は変更があったことを必ずしも認識しないため、変更が反映されません。

$apply() は、Angular フレームワークの外部から Angular 内の式を実行するために使用されます。(たとえば、ブラウザの DOM イベント、setTimeout、XHR、またはサードパーティのライブラリなど)

$scope.$apply()場所を変更した直後に使用して、replace()変更があったことを Angular に知らせるようにしてください。

おすすめ記事