Я пытаюсь упростить приведенный ниже код, который находится внутри углового контроллера, динамически добавляет атрибут и перекомпилирует директивный внутренний html.угловая директива внутренняя перекомпиляция html с динамическим атрибутом связывания
additionalInfo: '=',
Этот атрибут позволяет части кода в шаблоне, поэтому он должен быть повторно в то же время создается динамически
$element.attr('additional-info', "'test'");
var template = angular.element('<a></a>').append($element.clone()).html();
$element.replaceWith($compile(template)($scope.$parent));
код прекрасно работает, я пытаюсь отогнать код к минимуму любой мысли? Может быть, что-то можно заменить, чтобы выглядеть лучше?
У меня еще два варианта, которые дают тот же результат:
var template = angular.element('<a></a>').append($element.clone()).html();
var template = $element.get(0).outerHTML;
var template = $element.html($element.get(0).cloneNode(true));
Все они работают правильно, но последний фактически возвращая объект, но это все еще работает? Как? Зачем? За и против?
Для любви к Богу и всему, что свято, никогда не манипулируйте DOM в контроллере, никогда! Для получения дополнительной информации о том, почему: см. Https://docs.angularjs.org/guide/controller – Enzey
@ Enzey Yep, мне сказали сделать пользовательские директивы для манипуляций с DOM, и это то, что я делаю с тех пор :) – Michelangelo
Ваш в вопросе говорится, что вы добавляете атрибуты как часть контроллера. Это делается как часть функции контроллера, которая принимает элемент и изменяет его? – Enzey