首页 文章

nativescript |在android后退按钮导航后调用ngOnInit

提问于
浏览
3

我在处理后退按钮时遇到问题,当用户点击后退按钮时,未触发ngOnInit且组件未按预期工作 . 从我所看到的我明白,当回击它只使ngOnDestroy火,但不是ngOnInit

这是生命周期打开App - > ngOnInit()调用点击一些花药组件 - > ngOnInit()的新组件叫做tap back - > ngOnDestroy

有人有同样的问题,你是如何处理的?谢谢

2 回答

  • 1

    经过一番搜索,我决定使用这个解决方案

    在我需要运行ngOnInit的组件中,即使导航来自后退按钮或我添加了这个功能

    constructor(private location : PlatformLocation) {}
    
    ngOnInit() {
        this.location.onPopState(() => {
        this.initComponent();
    });
    }
    
  • 2

    为什么你认为 ngOnInit 应该跑回来?它没有

    解决方案是使用路由器事件:

    例如:从 "/beatles/john/songs/strawberryfields""/doors/jim/girlfriend/pam" 检测 back 的解决方案

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

    是:

    将此方法添加到共享服务中:

    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;
                                                                                                           })  );
            }
    

    在Doors页面中调用它:

    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`
           }
    

    请注意,您也可以在Doors中使用 /beatles/john/songs/strawberryfieldsbeatlesjohnsongsstrawberryfieldsatles )---->中的任何标记 . (子串)

    基本上,这些方法会检测您来自何处以及 back 之后的目的地 .

    顺便说一下,你可能想说:“好吧,我不知道我在哪里,我只想要一个用户点击”返回“的情况 .

    答案:

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

相关问题