Nativescript angular: ручка андроида назад на разных страницах - PullRequest
0 голосов
/ 22 марта 2019

Так что я использую эту функцию для обработки кнопки возврата Android:

this._page.on(Page.loadedEvent, event => {
        if (application.android) {
            application.android.on(application.AndroidApplication.activityBackPressedEvent, (args:AndroidActivityBackPressedEventData) => {      
                args.cancel = true;
                this._ngZone.run(() => {
                this.router.navigate(['/parameters']);
                });
            });
        }
    })   

на разных страницах (угловые компоненты). Так что на page1.ts у меня есть навигация (['/ parameters]) и на page2.ts у меня есть console.log ("test"). Проблема в том, где бы я ни находился в приложении, всегда нажимая кнопку «назад» (['/ параметры]), также и console.log, если я нахожусь на нужной странице, но он должен делать console.log только . Кажется, это глобально, есть идеи, как переопределить активностьBackPressedEvent?

Ответы [ 2 ]

1 голос
/ 22 марта 2019

activityBackPressedEvent не относится только к странице, это глобально для вашей деятельности, которая содержит все страницы. Как правило, вы не будете добавлять более одного прослушивателя событий к этому событию.

Вы можете сделать что-то вроде ниже, чтобы справиться с этим на уровне страницы, вероятно, в модуле приложения / main.ts

application.android.on(application.AndroidApplication.activityBackPressedEvent,
    (args: application.AndroidActivityBackPressedEventData) => {
        const page = frame.topmost().currentPage;
        if (page.hasListeners(application.AndroidApplication.activityBackPressedEvent)) {
            args.cancel = true;
            page.notify({
                eventName: application.AndroidApplication.activityBackPressedEvent,
                object: page
            });
        }
    });

С приведенным выше кодом, activityBackPressedEvent будет срабатывать на каждой странице, где есть слушатель.

Теперь на вашей странице / компоненте, в котором вы хотите настроить поведение, вы делаете это,

// Inject Page
constructor(private page: Page) { 
   this.page.on(application.AndroidApplication.activityBackPressedEvent, this.onBackButtonTap, this);
}

onBackButtonTap(data: EventData) {
            this._ngZone.run(() => {
                this.router.navigate(['/parameters']);
            });
}
0 голосов
/ 22 марта 2019

Я думаю, что поскольку вы добавили кнопку возврата назад в событие pageLoaded, поэтому она не работает на другой странице.

Код, который обрабатывает кнопку возврата, должен быть помещен в стартер приложения.Я использую NS Vue и помещаю этот код в свой main.js.Я думаю, что это может быть похоже на NS angular.

application.android.on(application.AndroidApplication.activityBackPressedEvent, (args:AndroidActivityBackPressedEventData) => {      
            args.cancel = true;
            this._ngZone.run(() => {
            this.router.navigate(['/parameters']);
            });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...