2015-11-19 46 views
2

我最近開始與離子框架工作(並因此與Angular.js爲好),我跑與角UI路由器的問題:當其中一個$stateParams發生更改時,我註冊的其中一個州不會重新初始化。起初,我認爲這是因爲國家是抽象的,有孩子,所以它從來沒有直接激活 - 但即使當我將它改爲非抽象和「最深」的國家之一時(即在看到國家一個樹結構),問題依然存在。奇怪的是,它似乎沒有發生在其他國家。

我嘗試過不同的方法並仔細閱讀文檔,但找不到問題的原因。

以下是我用來註冊狀態的代碼。國家app.festival是我遇到的問題之一:

  • 當我鏈接到app.festival.overview狀態的第一次,例如用URL /festival/33/overview,在國家的控制,以及其抽象父控制器app.festival正確初始化
  • 但後來,當我回去別的地方,然後鏈接到類似/festival/21/overview,只是這種狀態的控制器被重新初始化,但不是它的抽象父控制器(雖爲festivalId的參數的一部分它應該引發重新加載,我想)
  • this resu在其由app.festival狀態管理的實際節數據(由festivalId引用)LTS保持在整個應用程序相同的,因爲基本上它只是初始化一個控制器的一個「實例」用於app.festival不管不同$stateParams

的我需要這種結構的原因是,需要有一整個頁面(州)處理單個節日(應該由app.festival狀態來管理)。

$stateProvider 

.state('app', { 
    url: '', 
    abstract: true, 
    views: { 
     'appContent': { 
      templateUrl: 'views/main.html', 
      controller: 'MainCtrl' 
     } 
    } 
}) 

.state('app.general', { 
    url: '/general', 
    abstract: true, 
    views: { 
     'mainContent': { 
      templateUrl: 'views/sections/general.html', 
      controller: 'GeneralCtrl' 
     } 
    } 
}) 

.state('app.festival', { 
    url: '/festival/{festivalId:int}', 
    abstract: true, 
    views: { 
     'mainContent': { 
      templateUrl: 'views/sections/festival.html', 
      controller: 'FestivalCtrl' 
     } 
    } 
}) 

.state('app.general.festivals', { 
    url: '/festivals', 
    views: { 
     'generalContent': { 
      templateUrl: 'views/pages/general-festivals.html', 
      controller: 'GeneralFestivalsCtrl' 
     } 
    } 
}) 

.state('app.general.events', { 
    url: '/events', 
    views: { 
     'generalContent': { 
      templateUrl: 'views/pages/general-events.html', 
      controller: 'GeneralEventsCtrl' 
     } 
    } 
}) 

.state('app.general.event', { 
    url: '/events/{eventId:int}', 
    views: { 
     'generalContent': { 
      templateUrl: 'views/pages/general-event.html', 
      controller: 'GeneralEventCtrl' 
     } 
    } 
}) 

.state('app.festival.overview', { 
    url: '/overview', 
    views: { 
     'festivalContent': { 
      templateUrl: 'views/pages/festival-overview.html', 
      controller: 'FestivalOverviewCtrl' 
     } 
    } 
}); 

.state('app.festival.guide', { 
    url: '/guide', 
    views: { 
     'festivalContent': { 
      templateUrl: 'views/pages/festival-guide.html', 
      controller: 'FestivalGuideCtrl' 
     } 
    } 
}); 

這將是巨大的,如果有人可以幫助我在那裏,我已經把相當長的一段時間爲研究這個問題,但還沒有找到一個解決辦法。如果您需要更深入地瞭解代碼的特定部分,我很樂意將它發佈到此處。

+0

可能的[如何重新運行控制器,每次你瀏覽到相應的視圖/狀態?](http://stackoverflow.com/questions/33384826/how-to-re-run-the-controller -every - 時間 - 你導航的到最對應的視圖-S) –

回答

2

這是Ionic的默認行爲。它默認緩存視圖和控制器執行以提高性能。你可以用cache: false禁用它:

$stateProvider.state('myState', { 
    cache: false, 
    url : '/myUrl', 
    templateUrl : 'my-template.html' 
}); 

,也可以使用ui-sref-optshow to put reload option in ui-sref markup

Caching文檔在URL級別禁用它。