2016-06-21 16 views
1

サイドメニューを使用してIonicアプリを開発しています。しかし、国の変化は、私が望むように働いていません。角度UIルータが状態を変更するときにコントローラコードを実行しない

これはapp.jsファイルの私$stateProviderで定義された私の親子関係である:

.config(function($stateProvider, $urlRouterProvider) { 
    $stateProvider 
     .state('app', { 
     url: "/app", 
     abstract: true, 
     templateUrl: "templates/menu.html", 
     controller: 'AppCtrl' 
     }) 
     .state('app.home', { 
     url: "/home", 
     views: { 
      'menuContent':{ 
      templateUrl: "templates/home.html", 
      controller: 'AppCtrl' 
      } 
     } 
     }) 
     .state('app.map', { 
      url: "/map", 
      views: { 
       'menuContent':{ 
        templateUrl: "templates/map.html", 
        controller: 'MapCtrl' 
       } 
      } 
     }); 
     $urlRouterProvider.otherwise('/app/home'); 
}); 

これらは従うべき手順は次のとおりです。私はで定義された領域の要素をクリックすると

home.htmlテンプレート:

 <area id="ImgMap" shape="poly" coords="456,326,521,69,274,10,259,91,290,216,388,326" 
      ng-click="loadMap(0)" ui-sref="app.mapa" ui-sref-opts="{ reload: true }" title="Map" alt="Map"/> 
     //I've also tried with href='#/app/map' 

アプリはになります状態で、map.htmlテンプレートをロードし、コントローラコードMapCtrlを正しく実行します。その後

、私はサイドメニュー(次のようにコード)を介してバックhome.htmlページに行けば:

<ion-side-menus> 
    <ion-pane ion-side-menu-content> 
    <ion-nav-bar class="bar-positive nav-title-slide-ios7"> 
    </ion-nav-bar> 
    <ion-nav-view name="menuContent" animation="slide-left-right"></ion-nav-view> 
    </ion-pane> 
    <ion-side-menu side="left" > 
    <ion-content class="mymenu"> 
     <div id="menu-list"> 
     <ion-list class="list"> 
      <ion-item item-type="item-icon-left" nav-clear menu-close href="#/app/home"> 
      <i class="icon ion-home"></i><span>Home</span> 
      </ion-item> 
     </ion-list> 
     </div> 
    </ion-content> 
    </ion-side-menu> 
</ion-side-menus> 

そして私はちょうど最初のように、home.htmlページで定義された領域の要素でもう一度クリックします。今度はmapページに正しく移動しますが、コントローラーMapCtrlはコードを実行しないため、必要に応じてマップ情報を再ロードすることはできません。

したがって、再開です。私のhome州から私はmap州に行き、すべてが正しく実行されます。しかし、私がhome状態に戻り、プロセスを繰り返すと、map状態のコントローラは今回はそのコードを実行しません。

私は間違っていますか?

は、私は、代わりにtemplateUrltemplateオプションを使用$state.go()と状態の変化やリロードを強制しようとする、さまざまなソリューションを試してみた、など...しかし、それらのどれも私が期待どおりに動作するようです!

答えて

1

あなたが直面している問題は明らかです。これは、コントローラがシングルページアプリケーションで一度だけロードされるために発生します。しかし、イオンでは、迅速な修正があります。 ionicViewBeforeEnterの中に、コントローラの各コールで実行したいコードを保存することができます。

app.module('YourAppName').controller('MapCtrl ',function(){ 
    $scope.$on('$ionicView.beforeEnter', function(){ 
     //all your code you want to reinitialize goes here. 
    }); 
}); 
+0

別の方法としては、状態の定義にコントローラをリロードしないapparantly –

+0

@MuliYulzaryキャッシュを無効にすることができます:/ –

+0

そんなにありがとう@AlexRumbaNickedを!あなたのソリューションは私のニーズを完全にカバーしました! – daniegarcia254

関連する問題