Como posso adicionar uma classe à tag do corpo sem tornar o corpo como o seletor de aplicativo e usando a vinculação do host?
Eu tentei usar o Renderer, mas mudou todo o corpo
Classe de vinculação Angular 2.x na tag do corpo
Estou trabalhando em um grande aplicativo angular2 e alterar o seletor de raiz impactará muito código, terei que alterar muito código
Meu caso de uso é este:
Quando eu abro um componente modal (criado dinamicamente), quero que a barra de rolagem do documento oculte
document.body.className|classList
?class
abody
. Se você não vai usar renderização de servidor ou web worker, do que você tem medo?Respostas:
Eu adoraria comentar. Mas devido à falta de reputação, escrevo uma resposta. Bem, eu conheço duas possibilidades para resolver esse problema.
Bem e talvez até melhor. Você pode injetar o renderizador ou o renderizador 2 (no NG4) e adicionar a classe com o renderizador.
EDITAR PARA ANGULAR4:
fonte
import { DOCUMENT } from '@angular/platform-browser'
this.renderer.addClass(document.body, 'modal-open');
ethis.renderer.removeClass(document.body, 'modal-open');
@Inject(DOCUMENT)
não é mais necessário no construtorAcho que a melhor maneira de fazer isso é uma combinação de ambas as abordagens do DaniS acima: usando o renderizador para realmente definir / remover a classe, mas também usando o injetor de documentos, por isso não é fortemente dependente do,
window.document
mas pode ser substituído dinamicamente (por exemplo, ao renderizar do lado do servidor). Portanto, todo o código ficaria assim:fonte