В этом случае бессмысленно использовать $onInit

У меня есть компонент 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.

Инициализация компонента с помощью $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"
})

Инициализация компонента без $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"
    })
Другие вопросы по тегам