Как я могу добавить класс в тег тела, не используя тело в качестве селектора приложения и используя привязку хоста?
Я пробовал использовать Renderer, но он меняет все тело
Angular 2.x класс привязки к тегу body
Я работаю над большим приложением angular2, и изменение корневого селектора повлияет на много кода, мне придется изменить много кода
Мой вариант использования таков:
Когда я открываю модальный компонент (созданный динамически), я хочу, чтобы полоса прокрутки документа скрывала
document.body.className|classList
?class
кbody
. Если вы не собираетесь использовать серверный рендеринг или веб-воркер, чего вы боитесь?Ответы:
Я хотел бы прокомментировать. Но из-за пропавшей репутации пишу ответ. Я знаю две возможности решить эту проблему.
Ну а может даже лучше. Вы можете внедрить рендерер или рендерер 2 (на NG4) и добавить класс с рендерером.
РЕДАКТИРОВАТЬ ДЛЯ ANGULAR4:
источник
import { DOCUMENT } from '@angular/platform-browser'
this.renderer.addClass(document.body, 'modal-open');
иthis.renderer.removeClass(document.body, 'modal-open');
@Inject(DOCUMENT)
больше не нужен конструкторЯ думаю, что лучший способ сделать это - это комбинация обоих подходов DaniS, описанных выше: использование средства визуализации для фактической установки / удаления класса, а также использование инжектора документа, поэтому он не сильно зависит от,
window.document
но может быть заменен динамически (например, при рендеринге на стороне сервера). Итак, весь код будет выглядеть так:источник