2016-06-21 126 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' 

該應用轉到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狀態的控制器不會執行其代碼。

我在做什麼錯?

我已經想盡了各種辦法,試圖用template選項,而不是templateUrl,受力狀態的變化和重裝與$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

另外,您可以在狀態定義禁用緩存 –

+0

@MuliYulzary apparantly不重新加載控制器:/ –

+0

@AlexRumbaNicked太感謝你了!您的解決方案完全滿足我的需求 – daniegarcia254

相關問題