次のようなシナリオがあります。
- ブラウザのリロード、
- タブを閉じる
- ブラウザを閉じる
- ルートの変更 (リンクをクリックするなど)
- ブラウザの戻るボタンがクリックされました。または history.go(-1)。Macbook では 3 本の指でスワイプします。
ユーザーが何らかのフォームに記入したり、執筆の途中である場合は、これを防止したいと考えています。
このコードは問題なく動作しますが、複数のテキストフィールドに実装できない場合はまったく役に立ちません。現在、#/write url にいるかどうかのみをチェックします。入力をチェックしません。
これに対処する角度のある方法は何ですか? ターゲットのテキストフィールドを確認する最良の方法は何ですか? ディレクティブは解決策ですか? 何かのようなもの:
<input type="text" warningOnLeave ng-model="title"/>
また
<form warningOnLeave name="myForm">...</form>
$rootScope.$on('$locationChangeStart', function(event, current, previous){
console.log(current);
console.log(previous);
// Prevent route change behaviour
if(previous == 'http://localhost/#/write' && current != previous){
var answer = confirm ("You have not saved your text yet. Are you sure you want to leave?");
if (!answer)
event.preventDefault();
}
});
/**
Prevent browser behaviour
*/
window.onbeforeunload = function (e) {
if(document.URL == 'http://localhost/#/write'){
e = e || window.event;
// For IE and Firefox prior to version 4
if (e) {
e.returnValue = 'You have not saved your text yet.';
}
// For Safari
return 'You have not saved your text yet.';
}
else
return;
}