Отображение модалов: Angular directive / libraries VS direct native jQuery / bootstrap вызовы

Я ищу лучший способ обработки модалов в angular, и у меня складывается впечатление, что их нужно отделить от контроллеров, чтобы добиться разделения проблем в MVC.
Однако, когда дело доходит до реализации этого с помощью директивы или библиотеки, я не вижу необходимости в таких огромных затратах на добавление такого количества кода. Фактически кажется, что мы делаем точно то же самое, но с большим количеством вызовов и событий, начинающихся по сравнению с непосредственным отображением модального загрузчика в контроллере или службе с помощью jQuery так же легко, как:

    $scope.saveChanges = function () {
        $('#messageTitle').text('Done');
        $('#messageText').text('Changes have been saved.');
        $('#message').modal()
    }

Перенос директивы для обработки диалогового окна фактически показывает модальное с дополнительными шагами и настройками между зависимостями и т. д. в angular, внешние библиотеки и / или пользовательский код (в зависимости от того, как он применяется). Это действительно похоже на более упрощенный вызов метода к методу утилит в некотором файле utils, который просто покажет модальное использование jQuery. Опять же, я был бы просвещен, чтобы знать, почему это не тот случай, которого я ожидаю от более опытных угловых экспертов.

Помимо того, что предполагается правильный рабочий способ сделать это, есть причина, по которой DOM не должен ссылаться внутри контроллера. Может ли это повлиять на такие вещи, как производительность, багги код, тестирование и т.д.?

Я знаю, что это одна из причин, потому что это облегчает тестовые случаи. Опять же, действительная причина, однако, тестирование не является большой проблемой, имеющей DOM в бизнес-логике, как в коде выше, если проверено правильно. Если для этого есть еще более неотложные дела, то какие? Если таковые имеются, каков наилучший и наиболее эффективный способ добиться отделения DOM от контроллеров / служб, если то же самое относится к службам?

Предпосылки к текущим объяснениям:

Как правильно запустить манипуляцию jQuery DOM из контроллера?

Отделение манипуляции DOM от угловых контроллеров — Лучшая практика

AngularJS-почему манипулировать DOM в контроллере плохо?

Почему считается плохой идеей манипулировать DOM в контроллерах?

1 ответ

  1. Из моего понимания, это основные причины, почему контроллер не должен манипулировать DOM:

    • Тестирование. Тестовые случаи или шаги теста можно сделать хорошо составленными и очень легко тестируемыми при тестировании логики в контроллерах. Здесь тестируется то, за что должен отвечать контроллер (манипуляция моделью).

    • Применение хорошо структурированного кода MVC на основе углового кода. Разделение проблем снова дает плюс для тестирования, но также делает код более управляемым и хорошо структурированным.

    Я был бы рад услышать более подробные альтернативные ответы, чтобы полностью подтвердить и объяснить, что любая манипуляция DOM, что так когда-либо плохо в контроллере. Наоборот, было бы интересно узнать, есть ли исключения. Для информации других и моей попытки ответить, приведенные выше причины являются наиболее известными причинами и, таким образом, вероятно, единственными причинами, которые, по моему мнению, являются достаточно приемлемыми причинами на данный момент.