Jorre Jorre - 10 months ago 151
AngularJS Question

Run a controller function whenever a view is opened/shown

I'm building an app with angular+ionic that uses a classic three-button menu at the bottom with three ion-tabs in it. When a user clicks a tab, that template opens through ui-router.

I have states like this:

.state('other', {
url: "/other",
abstract: true,
templateUrl: "templates/other/other.html"

In the template I do something like:

<ion-nav-view name="other" ng-init="doSomething()"></ion-nav-view>

I'm aware that I can write the doSomething() function in my controller and just call it manually there. That gives me the same problem though. I can't seem to figure out how to call the doSomething() function more than once, whenever somebody opens that view.

Right now, the doSomething() function gets called just fine, but only the first time that view/tab gets opened by the user. I'd like to call a function (to update geolocation) whenever a user opens that view or tab.

What would be a correct way to implement that?

Thanks for helping out !


If you have assigned a certain controller to your view, then your controller will be invoked every time your view loads. In that case, you can execute some code in your controller as soon as it is invoked, for example this way:

<ion-nav-view ng-controller="indexController" name="other" ng-init="doSomething()"></ion-nav-view>

And in your controller:

app.controller('indexController', function($scope) {
        Write some code directly over here without any function,
        and it will be executed every time your view loads.
        Something like this:
    $ = 1;

Edit: You might try to track state changes and then execute some code when the route is changed and a certain route is visited, for example:

function(event, toState, toParams, fromState, fromParams){ ... })

You can find more details here: State Change Events.