2015-05-07 4 views
7

Ho due stati annidati, consisteva in uno stato astratto genitore e uno stato infantile:ionicView.enter non sparato a vista del bambino e il suo controller

.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'; 
        }] 
       } 
      }) 

e due controller sono:

.controller('HCDetailsCtrl',function($scope){ 
     $scope.$on("$ionicView.enter", function (scopes, states) { 
     ... 
     }); 
    }) 
    .controller('WdcDetailsCtrl',function($scope){ 
     $scope.$on("$ionicView.enter", function (scopes, states) { 
     ... 
     }); 
    }) 

Quando invoco lo stato app.heatingControllerDetails.wdc, vengono creati entrambi i controller, ma $ ionicView.enter viene richiamato solo sul controller principale. Qualche idea?

In heatingController.html, HC-dettagli Vista è definito come segue:

<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

Si consiglia di guardare a $ trasmissione angolare in modo da poter annunciare al bambino visualizzare il genitore è stato ionicView.enter'd: http://stackoverflow.com/questions/19446755/on-and-broadcast -in-angular e https://docs.angularjs.org/api/ng/type/$rootScope.Scope –

risposta

0

Quando si lavora con vista nidificate, è necessario utilizzare $ionicNavView eventi invece di $ionicView

Detto questo, al l'ultima versione di questi eventi è corrotta da bug e attualmente stanno lavorando a una correzione: Github issue

+0

In index.html, sto usando 'ion-nav-view' (per la vista principale) ma non lo faccio pensate che questo sia appropriato per una vista annidata, ovvero nidificare una vista di navigazione all'interno di un'altra? –

+0

Nono, quello che intendevo è che dovresti iscriverti all'evento '' $ ionicNavView.enter "' dal tuo controller di visualizzazione annidato invece di '" $ ionicView.enter "'. Sembra che gli eventi di '$ ionicView' siano per le viste di primo livello, mentre gli eventi di' $ ionicNavView' sono per le viste nidificate. Lo hanno comunque risolto (come previsto dal problema github), e penso che sarebbe bello se tenessero gli eventi '$ ionicView' anche per le viste nidificate ... Ma probabilmente c'è qualche motivo per separarli? – olivarra1

+0

Oh, mi scuso, dovrei aver letto meglio. Ci proveremo, grazie! –

0

Ho trovato un lavoro per questo. Collocarlo in un elemento principale della vista o posizionarlo nel primo controller caricato durante l'esecuzione dell'applicazione. È possibile utilizzarlo per osservare le modifiche alla vista "da e verso". Basta fare un confronto tra stringhe sull'url di toState emulated ionicView.enter abbastanza bene da ottenere ciò di cui avevo bisogno. Tenere presente che è necessario utilizzare UI-router per fare ciò. Spero che questo ti aiuti!

$rootScope.$on('$stateChangeStart', 
    function(event, toState, toParams, fromState, fromParams, options){ 
     if(toState.url == "/video/:Id"){ 
      console.log("Leaving the view."); 
     } 
    });