Угловая 7 Кордова 8 переопределение кнопки не работает - PullRequest
0 голосов
/ 04 ноября 2018

Я занимаюсь разработкой приложения для Angular 7 и Cordova 8. Я хочу переопределить событие кнопки возврата Cordova, чтобы предотвратить закрытие приложения, добавив прослушиватель событий, как описано в документах cordova

Мой код выглядит так:

let onDeviceReady = () => {
  enter code hereconsole.log("Bootstraping Module...")
  document.addEventListener("backbutton", (e) => {e.preventDefault(); e.stopPropagation(); console.log("backbutton"); return false;}, false);
  platformBrowserDynamic().bootstrapModule(AppModule);
};
document.addEventListener('deviceready', onDeviceReady, false);

В соответствии с документацией это должно препятствовать закрытию приложения. Я знаю, что вызовы preventDefault, stopPropagation и return false не нужны, но я нашел возможные решения моей проблемы, которые не сработали.

Когда я нажимаю кнопку "Назад", я вижу отпечаток backbutton, однако приложение все еще закрывается. Проверено на Android.

Обновление: после отладки проблемы с помощью logcat я мог видеть сообщение WARNING: Back Button Default Behavior will be overridden. The backbutton event will be fired!, которое регистрируется в классе плагина CoreAndroid, когда кнопка возврата переопределяется в собственном приложении Android. Тем не менее, когда я нажимаю кнопку, приложение выходит

Обновление: проблема была связана с OnsenUI, см. Мой ответ ниже

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Мне удалось решить проблему. Это было вызвано не Cordova или Angular, а OnsenUI, который я использовал для компонентов ввода. По умолчанию он перезаписывает все обработчики Cordova для кнопки, так как он обеспечивает свою собственную функциональность. Вы можете прочитать больше здесь

0 голосов
/ 04 ноября 2018

Мы передали логику кнопки в app.component.ts ngOnInit

import {Renderer2} from '@angular/core';

constructor(private renderer: Renderer2){}

ngOnInit(){

  const devicebackbutton = this.renderer.listen('document', 'backbutton', e => {
      e.preventDefault();
      e.stopPropagation();
      return false;
  });
} 
...