0
我所擁有的是一個迷宮$state.go
和大量的嵌套狀態。爲了簡化問題,我擁有的是這個。stateChange成功將控制權移動到UI路由器中的下一個狀態控制器
states.js
$stateProvider.state('main', {
url: "/create/",
templateUrl: "/static/partials/hotel_offers/navigation.html",
controller: "NavigatorController"
})
.state('main.photos', {
url: "select_photos/:property_id/:template",
templateUrl: "/static/partials/hotel_offers/photos.html",
controller: "PhotoController"
})
.state('main.details', {
url: "offer_details/:reference/:property_id/:template",
templateUrl: "/static/partials/hotel_offers/details.html",
controller: "OfferDetailsController"
});
在NavigatorController,
$state.go('main.details', params);
$scope.$on('$stateChangeSuccess', function() {
$scope.$broadcast('dataFetchComplete');
});
當該代碼是在main.photos
狀態。
在這兩種PhotoController和OfferDetailsController,
$scope.$on('dataFetchComplete', function() {
console.log($state.current.name);
});
的問題是我在控制檯不應該是這樣得到main.photos
。基本上我需要的是當控制轉移到OfferDetailsController
時觸發的事件。
更新: 這是沒有必要有視圖或部分加載。當控制從一個控制器移動到另一個時,我只需要一個事件。
絕對是一個解決方案,但不是我在找什麼。正如你所看到的,我需要在'stateChangeSuccess'上廣播一個事件。那,我認爲不可能通過'onEnter'。 – nightgaunt 2014-10-09 06:09:15
使用onEnter回調是一種乾淨的方式來處理狀態變化,因此請嘗試使用rootScope'$ rootScope。$ broadcast('dataFetchComplete');'在onEnter內部而不是另一個函數進行廣播。 – lmo 2014-10-09 15:32:02
另闢蹊徑。感謝您的迴應。 – nightgaunt 2014-10-16 04:32:23