7

我有两个嵌套状态,由父抽象状态和子状态组成:

.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.heatControllerDetails.wdc 时,会创建两个控制器,但 $ionicView.enter 仅在父控制器上调用。任何想法?

在heatController.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>
4

2 回答 2

0

我找到了解决这个问题的方法。将其放置在视图的父级中,或将其放置在运行应用程序时加载的第一个控制器中。您可以使用它来观察任何“往返”视图的变化。只需对 toState 模拟 ionicView.enter 的 url 进行字符串比较,就足以实现我需要的功能。请记住,您需要使用 UI-router 来执行此操作。希望这可以帮助!

$rootScope.$on('$stateChangeStart', 
    function(event, toState, toParams, fromState, fromParams, options){ 
        if(toState.url == "/video/:Id"){
            console.log("Leaving the view.");
        }
    });
于 2016-12-19T21:34:37.743 回答
0

使用嵌套视图时,您必须使用$ionicNavView事件而不是$ionicView

话虽这么说,在最后一个版本中,这些事件是错误的,他们目前正在修复:Github issue

于 2015-08-19T07:05:57.780 回答