2015-05-07 9 views
7

ich zwei verschachtelten Zustände haben, von einem übergeordneten abstrakten Zustand und einem Kind Zustand bestand:ionicView.enter nicht auf untergeordnete Ansicht und seine Controller gefeuert

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

und zwei Controller sind:

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

Beim Aufruf von state app.heatingControllerDetails.wdc werden beide Controller erstellt, aber $ ionicView.enter wird nur auf dem übergeordneten Controller aufgerufen. Irgendeine Idee?

In heatingController.html, hc-Details ansehen wird wie folgt definiert:

<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

Möglicherweise möchten Sie in Winkel $ Sendung sehen, so dass Sie die Eltern auf das Kind sehen ankündigen hat ionicView.enter'd: http://stackoverflow.com/questions/19446755/on-and-broadcast -in-eckig und https://docs.angularjs.org/api/ng/type/$rootScope.Scope –

Antwort

0

Wenn mit mehreren Ansichten arbeiten, können Sie $ionicNavView Veranstaltungen statt $ionicView

aber sagen, dass bei der verwenden letzte Version diese Ereignisse sind abgehört, und sie arbeiten derzeit in einem Fix: Github issue

+0

In index.html verwende ich 'ion-nav-view' (für die Hauptansicht), aber ich don ' Ich denke, dies ist für eine verschachtelte Ansicht geeignet - dh Verschachteln einer Navigationsansicht in einer anderen? –

+0

Nono, was ich meinte ist, dass Sie das Ereignis "$ ionicNavView.enter" von Ihrem verschachtelten View-Controller anstelle von "$ ionicView.enter" abonnieren sollten. Es sieht so aus, als wären $ ionicView-Ereignisse für Ansichten auf oberster Ebene, während $ ionicNavView-Ereignisse verschachtelte Ansichten sind. Sie haben es trotzdem abgehört (wie vom Github-Problem bereitgestellt), und ich denke, das wäre nett, wenn sie auch $ ionicView-Ereignisse für verschachtelte Ansichten beibehalten ... Aber wahrscheinlich gibt es einen Grund, warum sie sie getrennt haben? – olivarra1

+0

Oh, ich entschuldige mich, sollte besser gelesen haben. Werde es versuchen, danke! –

0

Ich fand eine Arbeit für diese. Platzieren Sie dieses in einem übergeordneten Element der Ansicht, oder platzieren Sie es in dem ersten Controller, der geladen wird, wenn Ihre Anwendung ausgeführt wird. Sie können dies verwenden, um Änderungen von 'nach und von' zu beobachten. Einfach einen String-Vergleich auf der URL des toState emulieren ionicView.Interpretieren Sie sich gut genug, um zu erreichen, wofür ich es brauchte. Denken Sie daran, dass Sie dazu den UI-Router verwenden müssen. Hoffe das hilft!

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