2014-01-29 60 views
26

比方說,我們有我們的$ stateProvider定義的父子關係如下:如何使角度ui路由器的父狀態總是在狀態改變時執行控制器代碼?

.state('myProfile', { 
     url: "/my/profile", 
     templateUrl: 'my/profile.html', 
     controller: 'MyProfileController' 
    }).state('myProfile.edit', { 
     url: "/edit", 
     templateUrl: 'my/profile.edit.html', 
     controller: 'EditMyProfileController' 
    }); 

這裏的想法是父myProfile狀態是不可編輯的,但孩子myProfile.edit狀態是實際形式編輯配置文件。讓我們忽略這是一個配置文件頁面應該如何工作 - 我只是玩弄事物和學習。

當用戶提交表單,我使用$狀態對象回到父頁面:

$scope.save = function() { 
    userResource.update($scope.user, function() { 
     SessionService.refresh(); 

     $state.go('myProfile'); // also tried with reload: true as well 
    }); 
} 

用戶後保存配置數據 - 這得到妥善保存 - 的父母的視圖不會更新,除非我按F5並刷新瀏覽器。

我注意到的一件事是,如果我讓孩子myProfile.edit狀態成爲父母本身而不是myProfile狀態的孩子,這個問題實際上消失了,事情表現如預期(儘管佈局看起來像這樣)。

似乎UI路由器可能會緩存父級的結果,不確定事情在模型中發生了變化,並且需要重新運行控制器?

如何保持父母與子女之間的關係,同時仍然讓父母myProfile頁面始終執行其控制器以重新加載其數據?基本上,我希望這種情況發生在$state時,或者點擊指向myProfile的鏈接。我怎樣才能做到這一點?

如果我不能做我想問的問題,那麼我知道我可以設置一些子狀態並讓它們按預期工作......但是,如何設置父級的默認子狀態?例如,假設我想myProfile.edit是默認的子狀態myProfile - 我該怎麼做?

謝謝!

回答

3

您是否嘗試過偵聽「$ stateChangeStart」事件和/或使用$ state.reload()?

33

要強制父狀態從子狀態導航到他時重新加載,您可以在下面使用這兩種方法。純js或指令屬性。

<a ui-sref="myProfile" ui-sref-opts="{ reload: true }">Back to My Profile</a> 

$state.go('myProfile', null, { reload: true }); 
+2

這是有幫助的,但在我的情況下,我有href的,因爲他們來自CMS。在這種情況下,我無法弄清楚如何將reload設置爲true。 – drye

+0

希望我可以upvote兩次 - 謝謝你! – Ben

+1

我也有同樣的問題。我也來自第三方系統。 – DragonDTG

2

好像有在$ state.go這是離開了重裝選項的錯誤。 $ state.transitionTo但是適用於我。

$state.transitionTo('state',null,{reload: true}); 
相關問題