Есть ли какой-либо жизненный цикл, например, window.onbeforeunload в Angular2? я уже гугле и искал на StackOverflow, но ничего не нашелЕсть ли какой-либо крючок жизненного цикла, например, window.onbeforeunload в Angular2?
ответ
<div (window:beforeunload)="doSomething()"></div>
или
@Component({
selector: 'xxx',
host: {'window:beforeunload':'doSomething'}
..
)}
или
@Component({
selector: 'xxx',
..
)}
class MyComponent {
@HostListener('window:beforeunload')
doSomething() {
}
}
Это как слушать глобальные события. Я не знаю, поддерживается ли специальное поведение этого события, где возвращаемое значение используется как текст для диалога конформации.
Вы все еще можете использовать
export class AppComponent {
constructor() {
window.onbeforeunload = function(e) {
return 'Dialog text here.';
};
}
}
Как объяснено здесь https://developer.mozilla.org/de/docs/Web/API/WindowEventHandlers/onbeforeunload
Гюнтера Zöchbauer является немного неправильно на два один отсчет, это то, что работает для меня:
@Component({
selector: 'xxx',
..
)}
class MyComponent {
@HostListener('window:beforeunload', ['$event'])
doSomething($event) {
if(this.hasChanges) $event.returnValue='Your data will be lost!';
}
}
Существует два основных отличия от Гюнтера Ответ:
Аргумент@HostListener
должен бытьwindow:beforeunload
и неwindow:onbeforeunload
- обработчик не должен возвращать сообщение, но должен назначить его в
$event.returnValue
вместо
Этот код работает для меня. К сожалению, это не выполняется в моем телефоне Android, когда я закрываю вкладку. Какие-либо предложения? – brijmcq
https://stackoverflow.com/questions/35779372/window-onbeforeunload-doesnt-trigger-on-android-chrome-alt-solution может помочь –
Диалог показывает, когда 'returnValue' ничего, кроме' null'. И большинство броузеров теперь выдают общее сообщение пользователю. Таким образом, вы не можете его изменить. –
Как насчет 'окна. onbeforeunload' подход? Как это не работает? –
К сожалению, все 3 варианта не работают. Должно ли это быть на родительском компоненте? На дочернем компоненте он не запускает событие. Пример: window.onbeforeunload = function (e) { alert ('Event triggered!');} –
Я обновил свой вопрос. Код (последний вариант) показывает диалог, когда я перехожу от страницы в Chrome. –