假设使用ng-controller
指令声明的纯 AngualrJS(1.6.x)控制器(与组件控制器相反)。
它是否具有生命周期挂钩,例如$onInit
或$onDestroy
?
答案 0 :(得分:1)
根据scope documentation (v1.6.10)中的范围生命周期部分,没有这样的挂钩(使用ng-controller
方法)。
范围生命周期如下:
根范围是由$injector
在应用程序引导期间创建的。在模板链接期间,某些指令会创建新的子作用域。
在模板链接期间,指令在作用域上注册监视。这些手表将用于将模型值传播到DOM。
要正确观察突变,应仅在scope.$apply()
内进行突变。 AngularJS API隐式地执行此操作,因此在控制器中进行同步工作或与$apply
,$http
或$timeout
服务进行异步工作时,不需要额外的$interval
调用。
在$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
});