javascript - Angular - 检测 Controller 何时为 `unloaded`

标签 javascript angularjs

我是新来的。我想在 viewDashboard Controller 卸载之前知道,但我不确定如何检测到它。

从左侧菜单 Template.fn_change_view() 更改 Template.active_view 到事件 View 名称后单击项目的基本操作,例如'dashboard',它显示/隐藏一些 view- 元素指令。

但是在 inactive 指令 Controller 中编写的代码之后不再执行。在此之前,我需要从这个非事件 Controller 执行一个功能。有什么办法吗?

我希望我写得足够清楚,如果没有我会尝试解释得更好。

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>                                

由 leftMenu 指令加载的 left-menu.html

<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 - 由 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:

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'
    };

最佳答案

作用域发出一个 $destroy 事件。请参阅 angular docs 中的事件部分.

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

关于javascript - Angular - 检测 Controller 何时为 `unloaded`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27675490/

相关文章:

javascript - 如何知道一个 promise 已经实现,以便我可以链接到它或使用它的结果?

javascript - 如何将 perl 哈希转换为 javascript 哈希

javascript - 如何禁用 h2 标签的 cufon 样式?

javascript - 在 Windows 7 中运行 Express.js

javascript - 如何在 Angular 中单击时调用 ng-lightbox 指令?

javascript - 如何获取用户并将其附加到评论中,然后使用 JavaScript 发送结果以查看?

javascript - 可点击工具提示内的 jQuery 多选小部件

javascript - jQuery 使用 index()

javascript - AngularJS .then 不是一个 function()

rest - 如何定义不使用 REST GET 查询参数的 Angular 资源?