Теперь я использую css-модули с компонентами AngularJS 1.5. Стек webpack + css-loader?modules=true + angular 1.5 components + pug.
В настоящее время я должен выполнить следующие шаги, чтобы использовать модули css в шаблоне мопса.
// my-component.js
import template from 'my-component.pug';
import styles from 'my-component.css';
class MyComponent {
constructor($element) {
$element.addClass('myComponent'); // ------ (1)
this.styles = styles; // ------ (2)
}
}
angular.module(name, deps)
.component('my-component', {
controller: MyComponent,
template: template,
});
// my-component.pug
div(class={{ ::$ctrl.styles.fooBar }}) FooBar // ----- (3)
// my-component.css
.myComponent { background: green; }
.fooBar { color: red; }
Есть две проблемы:
-
Каждый компонент должен вводить
$elementи устанавливать его имя класса вручную. Причина этого заключается в том, что сам тег компонента AngularJS существует в результате HTML без каких-либо классов, что делает CSS трудным. Например, если я используюMyComponentвыше, например:<div> <my-component></my-component> </div>он сгенерирует следующий HTML:
<div> <my-component> <div class="my-component__fooBar__3B2xz">FooBar</div> </my-component> </div>По сравнению с ReactJS,
<my-component>в приведенном выше результате HTML является дополнительным, иногда он затрудняет запись CSS. Поэтому мое решение (1), чтобы добавить к нему класс. -
Класс в шаблоне слишком длинный (3). Я знаю, что это правильный способ ссылки
$ctrl.styles.fooBar, но это слишком долго.
Мое идеальное решение будет таким:
// my-component.js
angular.module(name, deps)
.component('my-component', {
controller: MyComponent,
template: template,
styles: styles,
});
// my-component.css
div(css-class="fooBar") FooBar
Идея состоит в следующем:
- make
angular.module().componentподдерживает дополнительный атрибутstyles, который автоматически выполнит (2)this.styles = styles;в контроллере и применит (1)$element.addClass(). - директива
css-classприменить$ctrl.stylesк элементу.
Мой вопрос: я понятия не имею, как реализовать идею 1 выше (2 легко). Я ценю, если бы кто-нибудь мог рассказать об этом.