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