2014-12-28 16 views
7

Jestem nowy, jestem kanciasty. Chcę wiedzieć, zanim zwolni się sterownik viewDashboard i nie jestem pewien, w jaki sposób mogę to wykryć.Kątowe - wykrywanie, kiedy kontroler jest "wyładowany"

Po kliknięciu elementu z lewego menu Template.fn_change_view() zmiana na aktywną nazwę widoku np. "panel" i pokazuje/ukrywa niektóre dyrektywy elementów.

Ale po tym kodzie napisanym wewnątrz nieaktywnego kontrolera dyrektywy nie można wykonać więcej. Zanim to nastąpi, muszę wykonać jedną funkcję z tego nieaktywnego kontrolera. Czy istnieje jakiś sposób, aby to zrobić?

Mam nadzieję, że napiszę to wystarczająco jasno, jeśli nie, postaram się wyjaśnić lepiej.

HTML:

index.html

<body class="template" ng-controller="TemplateController as Template" ng-class="{'on': Template.loged_in}"> 
    <div class="mainFlexCont">    
     <left-menu class="menuFlexCont menu" ng-class="{'open': Menu.isMenuOpen}"></left-menu> 
     <!-- dashboard is visible only when Template.active_view is equal to 'dashboard' -->    
     <view-dashboard class="contentFlexCont" ng-if="Template.fn_active_view('dashboard')"></view-dashboard>    
     <!-- ... --> 
    </div>  
    <!-- ... --> 
</body>         

lewej menu.html ładowany przez dyrektywy leftMenu

<ul class="leftMenu"> 
    <li> 
     <a class="toggleLeft" ng-click="Menu.isMenuOpen = !Menu.isMenuOpen" href> 
      <i class="fa fa-bars"></i> Toggle Menu 
     </a> 
    </li> 
    <!-- view change by clicking one of list items --> 
    <li ng-repeat="item in Menu.obj_items" ng-click="Template.fn_change_view(item.active)" ng-class="{'active' : Template.fn_active_view(item.active)}"> 
     <a href> 
      <i class="fa {{item.icon}}"></i> {{item.label}} 
     </a> 
    </li> 
</ul> 

dashboard.html - ładowany przez dyrektywy viewDashboard

<div class="row"> 
    <div class="col-xs-12"> 
     <h1>Dashboard</h1> 
    </div> 
</div> 
<div class="row"> 
    <div class="col-lg-7"> 
     <chart-yearly class="chart"></chart-yearly> 
    </div> 
</div> 

JS:

dyrektywa

chartYearly

app.directive('chartYearly', function() { 
    return{ 
     restrict: 'E', 
     templateUrl: 'views/chart-yearly.html', 
     controller: function ($scope) { 
      // how I can detect here before Yearly controler will be unloaded? 
      // when Template.active_view will change to different than dashboard 
       $scope.$watch('Template.active_view', function() { 
        // I need to execute this when this directive is active either before is unloaded 
        console.log(2); 
       }); 
     }, 
     controllerAs: 'Yearly' 
    }; 

Odpowiedz

15

celownicze emitować zdarzenia $destroy. Zobacz sekcję wydarzeń pod numerem angular docs.

$scope.$on('$destroy', function() { 
    // clean up stuff 
}) 
Powiązane problemy