[4.0.0-rc.0] ion-tabs lifecycle events not working when navigating back from another view
See original GitHub issueBug Report
Ionic version: [x] 4.x
Current behavior:
I have some items/cards on my tab pages and navigate to other pages when I click on them. When I go back to the tabs pages from those views, my lifecycle events like ionViewDidEnter()
do not fire. They fire when I’m changing tabs, but when I am coming from a non-tab view, they never fire.
Expected behavior: For these lifecycle events to fire.
Steps to reproduce: Create a tab project, navigate to another view from a tab page that isn’t another tab, go back to the tab page and see that they have not fired.
Ionic info:
Ionic:
ionic (Ionic CLI) : 4.6.0 (/usr/lib/node_modules/ionic)
Ionic Framework : @ionic/angular 4.0.0-rc.0
@angular-devkit/build-angular : 0.10.7
@angular-devkit/schematics : 7.1.2
@angular/cli : 7.1.2
@ionic/angular-toolkit : 1.2.1
Cordova:
cordova (Cordova CLI) : not installed
Cordova Platforms : not available
Cordova Plugins : not available
System:
NodeJS : v8.14.0 (/usr/bin/node)
npm : 6.4.1
OS : Linux 4.18
Issue Analytics
- State:
- Created 5 years ago
- Reactions:11
- Comments:42 (11 by maintainers)
Top Results From Across the Web
Ionic 4 Tab to page then back to Tab did not trigger ...
Tab navigate not trigger ionViewDidEnter ... None of the event work when back from page to tab ... Data does not update second...
Read more >Ionic 4 ionViewDidEnter() didnt triggered after navigated ...
Anyone having issues with the ionViewDidEnter() too (like in my case)? As I know these lifecycle event function, it's fired when entering a...
Read more >Ionic View Not Updating Page When Opened Second Time
The ionViewWillEnter lifecycle if its still called that only triggers once.In ionic 3 the ionViewWillEnter triggered every time you navigated to ...
Read more >IOnic 3.0.1 发布,紧随ng4 + 的脚步
Your app should still function the same without any issues. ... closes #7388; navigation: adds public willLoad lifecycle event (033e1ea) ...
Read more >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
Hi everyone,
I wanted to provide an update regarding the status of this issue. After discussing with the team, we have determined this is not a bug in Ionic Framework; however, we realize there are valid use cases in which developers may want to listen for lifecycle events on an individual tab. Due to this, we have provided a temporary workaround as well as plans for further development.
Why is this not a bug?
When pages transition in Ionic Framework, they fire lifecycle events. For example, going from
/page1
to/page2
would fireionViewWillLeave
andionViewDidLeave
events on the Page1 component andionViewWillEnter
andionViewDidEnter
events on the Page2 component. The same logic applies when going from/tabs/tab1
to/tabs/tab2
. In both of these scenarios, we are staying within the same parention-router-outlet
context.The reported issue occurs when navigating between
ion-router-outlet
contexts. In this case, we are seeing it when navigating from/tabs/tab1
to/page2
. When this transition happens, Tab1 remains the active tab, and the entire tabs context transitions away. As a result, lifecycle events will fire on the root TabsPage component, but not on Tab1.For many users, this is unexpected because Tab1 visually appears to transition away. However, under the hood, the entire tabs context transitions away.
What is the workaround?
Luckily, there is an easy to use workaround for developers who wish to listen for lifecycle events on individual tab pages:
tabs.page.html
tabs.page.ts
In this example we do 2 things:
ionTabsDidChange
.Future Work
For future major releases of Ionic Framework, we are investigating bringing Ionic Angular routing closer to what Ionic React does. This would involve each Ionic page having a root
ion-page
component, not including the root tabs page. Lifecycle events would be dispatched on these components.With this approach, the router sees a page transitioning in and a page transitioning out but does not care which router outlet each page is part of.
This would be a breaking change in Ionic Angular as the root tab page would no longer fire lifecycle events. Please note that this has not been finalized, and the implementation details may change. We are actively discussing the best way to do this while weighing the pros and cons of the implementation.
Please let me know if there are any questions. For any additional bugs, please open a new issue. Thank you!
Hi there,
Thanks for all the feedback so far! I have pushed a new nightly build that fixes this issue.
npm i @ionic/angular@4.4.1-dev.201905212016.fb63a6f