2017-01-24 4 views
1

я впрыснуть динамически компоненты в DOM с:Угловой 2 применять существующий класс CSS к динамическому нагнетаемому компоненту

let factory = this.componentFactoryResolver.resolveComponentFactory(component); 
let injector = ReflectiveInjector.fromResolvedProviders([], refDOM.parentInjector); 
let comp  = factory.create(injector); 
comp.changeDetectorRef.detectChanges(); 
refDOM.insert(comp.hostView,position); 
return comp 

У меня есть класс CSS:

.vbox { 

     display: -webkit-box; 
     display: -moz-box; 
     display:   box; 

     -webkit-box-orient: vertical; 
      -moz-box-orient: vertical; 
      -ms-box-orient: vertical; 
       box-orient: vertical; 


     display: -webkit-flex; 
     display: -moz-flex; 
     display:  -ms-flex; 
     display:   flex; 

     -webkit-flex-direction: column; 
      -moz-flex-direction: column; 
      -ms-flex-direction: column; 
       flex-direction: column; 
} 

Я хочу, чтобы применить класс VBox к тег: host css динамического инжектируемого компонента. Поскольку динамический компонент не задан в html-файле перед его вводом, я не могу применять существующие стили классов, такие как: class = "vbox".

Можно ли достичь этого?

спасибо.

ответ

1

Вы можете либо внутри динамической компоненты добавить

@HostBinding('class.vbox') 
isVboxClass:boolean = false; // or true by default 

, а затем включите его с помощью

comp.instance.isVboxClass = true; 

или просто

comp.location.classList.add('vbox'); 
+0

Спасибо за ваш ответ. Я хочу применить к самому тегу хоста класс vbox, а не к дочерним узлам хоста. То есть, я хочу применить существующий стиль и не обращаться к существующим элементам класса внутри хоста. Спасибо. –

+0

Я вижу. Непонятно. и вы хотите добавить его независимо от того, какой компонент 'component' на самом деле есть? –

+0

Да. Каждый динамический компонент имеет конкретный файл css, определенный в styleUrls. Я определяю конкретные правила стиля внутри файла css с использованием тега хоста, но, поскольку правило vbox используется в других компонентах, оно указано в другом файле css. При объявлении класса явно в html все работает нормально, но с динамическими компонентами я не могу явно указать использование vbox класса в html. –

Смежные вопросы