2014-10-09 53 views
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狀態。

在這兩種PhotoControllerOfferDetailsController

$scope.$on('dataFetchComplete', function() { 
    console.log($state.current.name); 
}); 

的問題是我在控制檯不應該是這樣得到main.photos。基本上我需要的是當控制轉移到OfferDetailsController時觸發的事件。

更新: 這是沒有必要有視圖或部分加載。當控制從一個控制器移動到另一個時,我只需要一個事件。

回答

1

也許這樣?

.state('main.details', { 
    url: "offer_details/:reference/:property_id/:template", 
    templateUrl: "/static/partials/hotel_offers/details.html", 
    controller: "OfferDetailsController", 
    onEnter: function(){ 
     do something... 
    } 
}); 

還有一個onExit當你離開視圖的回調。

+0

絕對是一個解決方案,但不是我在找什麼。正如你所看到的,我需要在'stateChangeSuccess'上廣播一個事件。那,我認爲不可能通過'onEnter'。 – nightgaunt 2014-10-09 06:09:15

+0

使用onEnter回調是一種乾淨的方式來處理狀態變化,因此請嘗試使用rootScope'$ rootScope。$ broadcast('dataFetchComplete');'在onEnter內部而不是另一個函數進行廣播。 – lmo 2014-10-09 15:32:02

+0

另闢蹊徑。感謝您的迴應。 – nightgaunt 2014-10-16 04:32:23