2016-04-15 2 views
1

в моем приложении Я использую этот library, чтобы пользователь мог выбрать дату.Применить css в компоненте, который использует библиотеку js

Я завернут, что самозагрузки-виджет в компоненте, как это:

@Component({ 
    selector: 'date-picker', 
    template: '<input type="text" class="form-control" id="{{id}}" />', 
    styles: [` 
     .test { 
      background-color: green; 
     } 
    `], 
}) 
export class DatePickerComponent implements OnInit, OnChanges { 
    public id: string; 

    @Input() public date: Date; 
    @Input() public disabled: boolean; 

    public ngOnInit() { 
     this.id = 'dp-' + new Date().getTime(); 
     window.setTimeout(() => this.initializeDatePicker()); 
    } 

    public ngOnChanges(changes: any) { 
     if (!this.pickerFunctions) 
      return; 

     var typedChanges = <DatePickerComponent>changes; 
     if (typedChanges.disabled) 
      this.setPickerDisabled(this.disabled); 
     if (typedChanges.date) 
      this.setPickerDate(this.date); 
    } 

    private initializeDatePicker() { 
     var element = jQuery('#' + this.id); 
     (<any>element).datetimepicker(); 
     element.on('dp.change', (e: any) => this.date = e.date.toDate()); 

     this.setPickerDate(this.date); 
     this.setPickerDisabled(this.disabled); 
    } 

    private setPickerDate(date: Date) { 
     this.pickerFunctions.date(date ? date : null); 
    } 

    private setPickerDisabled(disabled: boolean) { 
     if (disabled) 
      this.pickerFunctions.disable(); 
     else 
      this.pickerFunctions.enable(); 
    } 

    private get pickerFunctions(): any { 
     var element = jQuery('#' + this.id); 
     return element.data("DateTimePicker"); 
    } 
} 

Проблема заключается в том, что стилей: [ «»] из компонента атрибутов не применяются.

Знаете ли вы, почему?

Я попытался импортировать файл css, и таким образом он работает, но я хочу использовать атрибут style, чтобы сделать компонент полностью многоразовым.

Большое спасибо

PS: Странно также, что CSS библиотеки не применяется .. Я импортировать его правильно

<link href="bower_components/eonasdan-bootstrap-datetimepicker/build/css/bootstrap-datetimepicker.min.css" /> 

ответ

2

Я думаю, что это должно работать:

:host >>> .test { 
     background-color: green; 
    } 

CSS не применяется, потому что ваш динамически добавленный HTML не использует классы, используемые угловым использованием для эмуляции инкапсуляции стиля. Использование «теневого пирсинга» комбинатора CSS должно обойти его.

+0

Спасибо, таким образом, он работает! Не могли бы вы лучше объяснить (или добавить ссылку) проблему и что такое «теневой пирсинг»? Еще раз спасибо – user3471528

+0

Угловая добавляет уникальные сгенерированные имена классов в ваши HTML-элементы и переписывает селектор в вашем CSS только для соответствия элементам текущего компонента. Когда вы динамически добавляете HTML, эти классы не добавляются и CSS не соответствует. Комбинатор теневого пирсинга поступает из теневого DOM (был устаревшим, но Angular поддерживает его прямо сейчас). '>>>' просто влияет на то, как CSS-селектора переписываются с помощью Angular. Таким образом, селектора CSS менее избирательны и отбрасываются в дочерние компоненты с другим (или в вашем случае нет) уникальным добавленным классом. –

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