2014-10-09 57 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