フォームが送信された後にページの URL を変更する際に問題が発生します。
私のアプリのフローは次のとおりです。
- ルートが設定され、URL が何らかのフォーム ページに認識されます。
- ページが読み込まれ、コントローラーが変数を設定し、ディレクティブが実行されます。
- AJAX を使用して特別なフォーム送信を実行する特別なフォーム ディレクティブが起動されます。
- 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 に知らせるようにしてください。