【问题标题】:Why to use $onInit in AngularJS? [duplicate]为什么在 AngularJS 中使用 $onInit? [复制]
【发布时间】:2018-02-01 22:50:45
【问题描述】:

在 AngularJS 中,如果我可以在没有该函数的情况下进行相同的初始化,$onInit 函数的目的是什么?

例如:

module.component("myComponent", {
        ...
        controller: function() {
            const $ctrl = this;

            $ctrl.$onInit = () => {
                $ctrl.var1 = "hello";
                $ctrl.var2 = { test: 3 };
            }
        }
    });

也可以这样:

module.component("myComponent", {
        ...
        controller: function() {
            const $ctrl = this;

            $ctrl.var1 = "hello";
            $ctrl.var2 = { test: 3 };
        }
    });

在某些情况下$onInit 是必要的吗?

【问题讨论】:

  • 随着 AngularJS V1.7 的发布,预先分配绑定到的选项已被弃用和删除。依赖于存在绑定的初始化逻辑应该放在控制器的 $onInit() 方法中,保证在分配绑定后总是被调用。

标签: javascript angularjs


【解决方案1】:

根据AngularJS docs

在元素上的所有控制器都已构建并初始化其绑定之后(以及在此元素上的指令的前后链接函数之前)在每个控制器上调用。

这给你两个保证:

  1. 已构建此元素上的所有控制器
  2. 尚未执行此元素的前后链接功能

与您的第一种方法相比,这些事实都不能得到保证(尽管第二种方法高度很可能)。

此外,就样式和可读性而言,它让潜在的读者/审阅者非常清楚,这是您作为开发人员打算在此控制器初始化时运行的代码。

【讨论】:

  • 不仅仅是可读性,还有测试和可扩展性。
猜你喜欢
  • 2018-12-18
  • 1970-01-01
  • 2014-08-03
  • 1970-01-01
  • 2014-05-30
  • 1970-01-01
  • 2016-03-10
  • 2019-12-14
  • 1970-01-01
相关资源
最近更新 更多