2016-04-21 1 views

ответ

30
<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

+0

Как насчет 'окна. onbeforeunload' подход? Как это не работает? –

+4

К сожалению, все 3 варианта не работают. Должно ли это быть на родительском компоненте? На дочернем компоненте он не запускает событие. Пример: window.onbeforeunload = function (e) { alert ('Event triggered!');} –

+1

Я обновил свой вопрос. Код (последний вариант) показывает диалог, когда я перехожу от страницы в Chrome. –

30
ответ

Гюнтера Zöchbauer является немного неправильно на два один отсчет, это то, что работает для меня:

@Component({ 
    selector: 'xxx', 
    .. 
)} 
class MyComponent { 
    @HostListener('window:beforeunload', ['$event']) 
    doSomething($event) { 
    if(this.hasChanges) $event.returnValue='Your data will be lost!'; 
    } 
} 

Существует два основных отличия от Гюнтера Ответ:

  1. Аргумент @HostListener должен быть window:beforeunload и не window:onbeforeunload
  2. обработчик не должен возвращать сообщение, но должен назначить его в $event.returnValue вместо
+0

Этот код работает для меня. К сожалению, это не выполняется в моем телефоне Android, когда я закрываю вкладку. Какие-либо предложения? – brijmcq

+0

https://stackoverflow.com/questions/35779372/window-onbeforeunload-doesnt-trigger-on-android-chrome-alt-solution может помочь –

+0

Диалог показывает, когда 'returnValue' ничего, кроме' null'. И большинство броузеров теперь выдают общее сообщение пользователю. Таким образом, вы не можете его изменить. –

 Смежные вопросы

  • Нет связанных вопросов^_^