1. ホーム
  2. angularjs

[解決済み] ビューが開かれたり表示されたりするたびにコントローラの関数を実行する

2023-08-19 04:12:21

質問

angular+ionicでアプリを作っているのですが、下部に古典的な3ボタンメニューがあり、その中に3つのion-tabを使用しています。ユーザーがタブをクリックすると、そのテンプレートがui-routerを通して開かれます。

私はこのような状態を持っています。

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

テンプレートでは、次のようなことをしています。

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

コントローラにdoSomething()関数を書いて、そこで手動で呼び出すことができることは承知しています。しかし、それは私に同じ問題を与えます。誰かがそのビューを開くたびに、doSomething()関数を複数回呼び出す方法を見つけ出すことができないようです。

今、doSomething()関数はうまく呼び出されますが、そのビュー/タブがユーザーによって開かれた最初のときだけです。私は、ユーザーがそのビューまたはタブを開くたびに、(ジオロケーションを更新するために) 関数を呼び出したいと思っています。

それを実装するための正しい方法は何でしょうか?

どのように解決するのですか?

ビューに特定のコントローラを割り当てた場合、ビューがロードされるたびにそのコントローラが起動されます。その場合、例えばこのように、コントローラが起動されたらすぐにコントローラ内のコードを実行することができます。

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

そして、コントローラーに

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:
    */
    $scope.xyz = 1;
});

編集します。 状態の変化を追跡し、ルートが変更され、特定のルートにアクセスしたときに何らかのコードを実行するなどの方法を試してみてはどうでしょうか。

$rootScope.$on('$stateChangeSuccess', 
function(event, toState, toParams, fromState, fromParams){ ... })

詳細はこちらでご確認ください。 状態変化イベント .