J'utilise maintenant des modules css avec des composants AngularJS 1.5. La pile est webpack
+ css-loader?modules=true
+ angular 1.5 components
+ pug
.Meilleure façon d'appliquer css-modules à AngularJS
Actuellement, je dois faire les étapes suivantes pour utiliser les modules CSS dans mon modèle pug.
// 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; }
Il y a deux problèmes:
Chaque composant doit injecter
$element
et définir son nom de classe manuellement. La raison pour cela est que le tag de composant AngularJS existe lui-même dans le HTML de résultat sans aucune classe, ce qui rend le CSS difficile. Par exemple, si j'utiliseMyComponent
ci-dessus comme ceci:<div> <my-component></my-component> </div>
il va générer le code HTML suivant:
<div> <my-component> <div class="my-component__fooBar__3B2xz">FooBar</div> </my-component> </div>
Par rapport à ReactJS,
<my-component>
en HTML résultat ci-dessus est un supplément, parfois il rend CSS difficile écrire. Donc ma solution est (1), pour y ajouter une classe.La classe dans le modèle est trop longue (3). Je sais que c'est la bonne façon de faire référence à
$ctrl.styles.fooBar
mais c'est trop long.
Ma solution idéale serait comme ceci:
// my-component.js
angular.module(name, deps)
.component('my-component', {
controller: MyComponent,
template: template,
styles: styles,
});
// my-component.css
div(css-class="fooBar") FooBar
L'idée est de:
- font
angular.module().component
support unstyles
attribut, qui fera automatiquement (2)this.styles = styles;
supplémentaire dans le contrôleur, et appliquer (1)$element.addClass()
ainsi. - la directive
css-class
pour appliquer$ctrl.styles
à l'élément.
Ma question est, je n'ai aucune idée de comment mettre en œuvre l'idée 1 ci-dessus (2 est facile). J'apprécie que quelqu'un puisse partager quelque chose à ce sujet. Je suis venu avec une solution que je ne suis pas tout à fait satisfait avec