Невозможно добавить атрибут к элементу с помощью $postLink — AngularJS

У меня есть простой компонент, и я пытаюсь добавить к моему элементу ввода атрибут multiple динамически, но почему-то это не работает. Почему? И есть ли способ сделать то, что я хочу?

app.component('myComponent', {
    templateUrl: 'tmpl.html',
    bindings: {
        str: '@'
    },
    controller: function () {
        var ctrl = this;
        ctrl.$postLink = function () {
            $('#myInputId').attr('multiple', '');
        }
    }
}

person anatol    schedule 08.01.2019    source источник
comment
@lenilsondc да, спасибо   -  person anatol    schedule 09.01.2019


Ответы (1)


Это решение:

app.component('myComponent', {
    templateUrl: 'tmpl.html',
    bindings: {
        str: '@'
    },
    controller: function ($element) {
        var ctrl = this;
        ctrl.$postLink = function () {
            $element.find('input').attr('multiple', 'multiple');
        }
    }
}

Хитрость заключалась в том, чтобы связать вещи. Код из вопроса не работает, потому что input еще не существует в DOM на момент срабатывания хука $postLink. Итак, нам нужно внедрить сервис $element в контроллер и использовать его для управления DOM.

person anatol    schedule 09.01.2019