【发布时间】:2017-06-06 22:08:05
【问题描述】:
我试图了解控制器的 $onDestroy 方法和 $scope.$destroy() 之间的区别。
定义说当组件的包含范围需要被销毁时调用 $onDestroy。但是 $scope.$destroy() 不也是这样吗?
根据我在 https://plnkr.co/edit/9RlS8OLxAoyK80WPMJaN?p=preview 创建的 plunker,
<div ng-controller="ParentController">
<button ng-click="func()">Parent</button>
<br><br>
<div ng-controller="ChildController">
<button ng-click="childFunc()"> Child </button>
<br><br>
<comp> </comp>
</div>
</div>
我注意到两种情况。
当我从 Parent 或 Child 控制器调用 $destroy() 时,组件中都会触发 $onDestroy 和 $scope.$on('$destroy') 事件。这是有道理的,因为当父范围被破坏时,组件的包含范围也被破坏。但是,我仍然可以单击“组件 FUNC”按钮并调用与其关联的函数。为什么会这样?
当我从组件本身调用 $destroy() 时,只会触发 $scope.$on('destroy') 事件,而不会触发 $onDestroy。此外,我无法像在案例 #1 中那样访问“组件功能”按钮。
谁能解释一下这两种情况的区别?
这不是现实生活中的用例,而是我想了解的东西。
谢谢。
【问题讨论】:
标签: javascript angularjs scope angular-components