在这种情况下使用 $onInit 是不是毫无意义

Posted

技术标签:

【中文标题】在这种情况下使用 $onInit 是不是毫无意义【英文标题】:Is it pointless to use $onInit in this case在这种情况下使用 $onInit 是否毫无意义 【发布时间】:2017-11-17 04:33:35 【问题描述】:

我有一个 angularJS (1.5+) 组件,它具有一些绑定到父控制器变量的单向绑定属性。该组件直接使用绑定对象中的这些属性,不需要设置任何局部变量。

当页面加载时,组件的绑定被初始化并绑定到默认值,因为父控制器将其变量初始化为默认值。

示例代码:

App.component('myComponent',
    bindings:
        binding_1: '<',
        binding_2: '<'
    ,
    template:'<div ng-show="$ctrl.binding_1">' +
    '<input type="button" ng-click="$ctrl.clicked()">' +
    '</div>',
    controller: function () 
        var ctrl = this;

        // would ctrl.$onInit = function()... be beneficial here at all?

        ctrl.clicked = function()
            console.log("ctrl.binding_2.text");
        
);

如果组件仅使用其绑定属性,并且这些属性在页面加载时通过父控制器变量初始化为默认值,那么实现 $onInit 的好处是什么,我希望在哪里看到这个(这些)好处?

【问题讨论】:

【参考方案1】:

$onInit 是组件的初始化生命周期钩子。您应该在那里执行初始化逻辑。对于您的代码示例,组件绑定可能是可访问的,因为它们是在单击处理程序中访问的。这是一个演示 $onInit 的小演示。

Component Initialization with $onInit

angular.module('app',[])
.controller("MyController", function()
  var ctrl = this;
  ctrl.title = "Hello World";
)
.component("myComponent", 
   bindings:
        bindingOne: '<'
    ,
    template: ' <h1>ctrl.title</h1>',
    controller: function()
      this.$onInit = function()
        this.title = this.bindingOne;
      

    ,
    controllerAs: "ctrl"
)

Component Initialization Without $onInit

  angular.module('app',[])
    .controller("MyController", function()
      var ctrl = this;
      ctrl.title = "Hello World";
    )
    .component("myComponent", 
       bindings:
            bindingOne: '<'
        ,
        template: ' <h1>ctrl.title</h1>',
        controller: function()
          this.title = this.bindingOne;
        ,
        controllerAs: "ctrl"
    )

【讨论】:

以上是关于在这种情况下使用 $onInit 是不是毫无意义的主要内容,如果未能解决你的问题,请参考以下文章

按值加入两个熊猫系列[重复]

转:德鲁克:为什么加强「员工满意度」毫无意义?

热议:月薪1.8万却毫无意义的工作,你干吗?

RSA数字签名是啥?

关于Ajax

如何使用 CSS3 转换字体样式?