我有两个嵌套状态,由父抽象状态和子状态组成:
.state('app.heatingControllerDetails', {
url: "/clients/:clientId/heatingControllers/:heatingControllerId",
abstract: true,
views: {
'menuContent': {
templateUrl: "templates/heatingController.html",
controller: 'HCDetailsCtrl'
}
}
})
.state('app.heatingControllerDetails.wdc', {
url: "/wdc",
views: {
'hc-details': {
templateUrl: "templates/heatingControllers/wdc.html",
controller: 'WdcDetailsCtrl'
}
},
resolve:{
hcFamily: [function(){
return 'wdc';
}]
}
})
和两个控制器是:
.controller('HCDetailsCtrl',function($scope){
$scope.$on("$ionicView.enter", function (scopes, states) {
...
});
})
.controller('WdcDetailsCtrl',function($scope){
$scope.$on("$ionicView.enter", function (scopes, states) {
...
});
})
当我调用状态app.heatingControllerDetails.wdc时,会创建两个控制器,但仅在父控制器上调用$ ionicView.enter。有什么想法吗?
在heatingController.html中,hc-details视图定义如下:
<ion-content class="has-header" ng-show="hc">
<div ui-view name="hc-details"></div>
<div class="disableContentDiv" ng-hide="hc.state=='Online'"></div>
</ion-content>
答案 0 :(得分:0)
使用嵌套视图时,您必须使用$ionicNavView
个事件而不是$ionicView
话虽如此,在上一次发布时,这些事件都被窃听,他们目前正在修复:Github issue
答案 1 :(得分:0)
我为此找到了解决方法。将其放在视图的父级中,或将其放在运行应用程序时加载的第一个控制器中。 您可以使用它来观察任何“往返”视图更改。只需在toState模拟ionicView.enter的url上进行字符串比较,就可以实现我所需要的。请记住,您需要使用UI路由器来执行此操作。希望这有帮助!
$rootScope.$on('$stateChangeStart',
function(event, toState, toParams, fromState, fromParams, options){
if(toState.url == "/video/:Id"){
console.log("Leaving the view.");
}
});