【问题标题】:AngularJS pure ng-controller lifecycle hooksAngularJS 纯 ng-controller 生命周期钩子
【发布时间】: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 方法。

标签: angularjs angular-controller angular-lifecycle-hooks


【解决方案1】:

根据scope documentation (v1.6.10) 中的Scope Life Cycle 部分,没有这样的钩子(使用ng-controller 方法)。

作用域生命周期如下:

  1. 创作

根范围是在应用程序引导期间由$injector 创建的。在模板链接期间,一些指令会创建新的子作用域。

  1. 观察者注册

在模板链接期间,指令在作用域上注册监视。这些监视将用于将模型值传播到 DOM。

  1. 模型变异

要正确观察突变,您应该只在scope.$apply() 内进行突变。 AngularJS API 隐式执行此操作,因此在控制器中进行同步工作或使用 $http$timeout$interval 服务进行异步工作时,不需要额外的 $apply 调用。

  1. 突变观察

$apply 结束时,AngularJS 在根作用域上执行$digest 循环,然后传播到所有子作用域。在$digest 循环中,检查所有$watched 表达式或函数的模型突变,如果检测到突变,则调用$watch 侦听器。

  1. 作用域破坏

当不再需要子作用域时,子作用域创建者有责任通过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
});

【讨论】:

    猜你喜欢
    • 2020-01-15
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 2018-08-30
    • 2016-08-26
    • 1970-01-01
    相关资源
    最近更新 更多