nativescript |вызвать ngOnInit после андроида назад кнопка навигации - PullRequest
0 голосов
/ 10 июня 2018

У меня проблема с обработкой кнопки «Назад», когда пользователь, нажимающий кнопку «Назад», ngOnInit не запускается, и компонент не работает так, как хотел.из того, что я увидел, я понимаю, что при обратном прикосновении он вызывает только огонь ngOnDestroy, но не ngOnInit

это жизненный цикл

open App -> ngOnInit () с именем

щелкните по другому компоненту пыльника -> ngOnInit () нового компонента с именем

tap back -> ngOnDestroy

У кого-то была такая же проблема и какВы справляетесь с этим?спасибо

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

После некоторого поиска я решил использовать это решение

в компонентах, которые мне нужны для запуска ngOnInit, даже если навигация осуществляется с помощью кнопки назад или функции, я добавил это

constructor(private location : PlatformLocation) {}

ngOnInit() {
    this.location.onPopState(() => {
    this.initComponent();
});
}
0 голосов
/ 10 июня 2018

Почему, по вашему мнению, ngOnInit должен бежать назад?он не

Решение состоит в том, чтобы использовать события маршрутизатора:

Например: Решение для обнаружения back от "/beatles/john/songs/strawberryfields" до "/doors/jim/girlfriend/pam"

Doors page --------> Beatles page.....(back tapped)----------->Doors

Is:

Добавьте этот метод в общую службу:

 public onNavigatePreviousToCurrent(pre: string, current: string  ): Observable<any>
        {
            return this.router.events.pipe(filter(e => e instanceof NavigationEnd), pairwise(), filter((f: [any, any]) =>
                                                                                                       {
                                                                                                           return f[0].url.toLowerCase()
                                                                                                                      .indexOf(pre.toLowerCase()) > -1 &&
                                                                                                                  f[1].url.toLowerCase()
                                                                                                                      .indexOf(current.toLowerCase()) > -1;
                                                                                                       })  );
        }

На странице Двери назовите его:

 ngOnInit()
        {
            let f = this._routingService.onNavigatePreviousToCurrent("john", "pam") //or doors or jim
                        .subscribe((res) =>
                                   {
                                    //do what you want here !!!
                                   }, (error) =>
                                   {
                                   });

   //don't forget to unsubscribe `f`
       }

Обратите внимание, что вы можете использовать любой токен из /beatles/john/songs/strawberryfields (beatles, john, songs, strawberryfields, atles) ----> также в Двери.(подстрока)

В основном этот метод определяет, откуда вы пришли и каков пункт назначения после back.

Кстати, вы можете сказать: "ну, я не знаю, где яЯ только хочу, чтобы пользователь нажал «назад».

Ответ:

this._routingService.onNavigatePreviousToCurrent("/", "pam") ;
// "/" will always be present , so basically this ^ detects back from anywhere to Doors page  
...