AngularJS 纯 ng-controller 生命周期钩子
Posted
技术标签:
【中文标题】AngularJS 纯 ng-controller 生命周期钩子【英文标题】:AngularJS pure ng-controller lifecycle hooks 【发布时间】:2019-01-21 10:18:46 【问题描述】:假设一个纯 AngualrJS (1.6.x) 控制器使用 ng-controller
指令声明(与组件控制器相反)。
它是否有像 $onInit
或 $onDestroy
这样的生命周期钩子?
【问题讨论】:
你可以看到链接toddmotto.com/angular-1-5-lifecycle-hooks也许对你有帮助。 @FerasAlSous 我认为这不适用于此处,因为当使用ng-controller
指令创建控制器时,OP 要求这些钩子,而不是使用 .component
方法。
【参考方案1】:
根据scope documentation (v1.6.10) 中的Scope Life Cycle 部分,没有这样的钩子(使用ng-controller
方法)。
作用域生命周期如下:
-
创作
根范围是在应用程序引导期间由$injector
创建的。在模板链接期间,一些指令会创建新的子作用域。
-
观察者注册
在模板链接期间,指令在作用域上注册监视。这些监视将用于将模型值传播到 DOM。
-
模型变异
要正确观察突变,您应该只在scope.$apply()
内进行突变。 AngularJS API 隐式执行此操作,因此在控制器中进行同步工作或使用 $http
、$timeout
或 $interval
服务进行异步工作时,不需要额外的 $apply
调用。
-
突变观察
在$apply
结束时,AngularJS 在根作用域上执行$digest
循环,然后传播到所有子作用域。在$digest
循环中,检查所有$watched
表达式或函数的模型突变,如果检测到突变,则调用$watch
侦听器。
-
作用域破坏
当不再需要子作用域时,子作用域创建者有责任通过scope.$destroy()
API 销毁它们。这将停止将$digest
调用传播到子作用域,并允许垃圾收集器回收子作用域模型使用的内存。
当然,您也可以随时使用$rootScope.Scope#$on
来监听变化。
例子:
$scope.$on('my-custom-event', function ()
// some code to execute when my-custom-event is fired
);
$scope.$on('$destroy', function ()
// some code to execute when the scope is destroyed
);
【讨论】:
以上是关于AngularJS 纯 ng-controller 生命周期钩子的主要内容,如果未能解决你的问题,请参考以下文章
AngularJS:ng-include 和 ng-controller
Angularjs,使用 data-ng-controller 和 ng-controller [重复]
Angular-Material 、 AngularJS 、 TypeScript 、 Javascript 、 ng-controller 在我的 md-dialog 中无法访问