Angular js 1.7 $ Синтаксис функции onInit - PullRequest
0 голосов
/ 10 февраля 2020

Я недавно обновил свое приложение с angularjs 1.5.9 до angularjs 1.7.9. В одном из моих контроллеров у меня был следующий код:

angular.module( 'myModule' )
.component( 'dynamicContent', {
    bindings: {
        pageTitle: '<',
        content: '<',
        type: '<',
        width: '<'
    },
    templateUrl: 'path/to/html/file',
    controllerAs: 'dynamic',
    controller: function( $state, $window, Contentful ) {
        var vm = this;

        vm.$onInit = _init();

        function _init() {
            vm.items = _.map( vm.content, mapContent );
        }

После обновления до 1.7.9 переменная vm.items так и не была определена, потому что vm.content не был определен в функции _init. Однако после изменения кода на ...

 angular.module( 'myModule' )
.component( 'dynamicContent', {
    bindings: {
        pageTitle: '<',
        content: '<',
        type: '<',
        width: '<'
    },
    templateUrl: 'path/to/html/file',
    controllerAs: 'dynamic',
    controller: function( $state, $window, Contentful ) {
        var vm = this;

        vm.$onInit = function _init() {
            vm.items = _.map( vm.content, mapContent );
        }

Теперь это работает. Может кто-нибудь объяснить , почему определение функции, где я установил ее в $ onInit, делает эту работу? Спасибо!

1 Ответ

0 голосов
/ 10 февраля 2020
vm.$onInit = _init();

Это равно простому _init();, вы, вероятно, имели в виду vm.$onInit = _init.

В 1.5 вы можете запустить init самостоятельно, и никакой разницы не было, но в последнем Angularjs привязки устанавливаются после основной функции контроллера, но до инициализации, например:

bindings: { test: '<'}
controller: () => {
  var vm = this;
  console.log(vm.test); // undefined
  vm.$onInit = () => {
    console.log(vm.test); // has value
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...