için css modüllerini uygulamanın daha iyi bir yolu Şu an AngularJS 1.5 bileşenlerine sahip css modülleri kullanıyorum. Yığın webpack
+ css-loader?modules=true
+ angular 1.5 components
+ pug
'dur.AngularJS
Şu anda, pug şablonumda css modüllerini kullanmak için aşağıdaki adımları izlemeliyim.
// 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; }
iki sorun vardır:
Her bileşen
$element
enjekte ve elle sınıf adını ayarlamak zorundadır. Bunun nedeni, AngularJS bileşen etiketinin, herhangi bir sınıf içermeyen sonuç HTML'sinde bulunmasıdır, bu da CSS'yi zorlaştırır. Örneğin, böyle yukarıdaMyComponent
kullanıyorsanız:<div> <my-component></my-component> </div>
aşağıdaki HTML üretecektir: Yukarıdaki sonuç HTML ReactJS karşılaştırıldığında
<div> <my-component> <div class="my-component__fooBar__3B2xz">FooBar</div> </my-component> </div>
,
<my-component>
ekstra olup, bazen CSS zorlaştırır yazmak. Bu yüzden benim çözümüm bir sınıf eklemek için (1).Şablondaki sınıf çok uzun (3).
$ctrl.styles.fooBar
'a başvurmanın doğru yolu olduğunu biliyorum, ancak bu çok uzun.
Benim ideal çözüm böyle olacağını:
// my-component.js
angular.module(name, deps)
.component('my-component', {
controller: MyComponent,
template: template,
styles: styles,
});
// my-component.css
div(css-class="fooBar") FooBar
fikri şudur:
- yapmak
angular.module().component
destek otomatik olarak (2)this.styles = styles;
yapacak ekstrastyles
nitelik, kontrolörü ve (1)$element.addClass()
'u da uygulayın. Öğeye$ctrl.styles
uygulamak için - yönergesi
css-class
.
Sorum şu ki, yukarıdaki 1 numaralı fikri nasıl uygulayacağımı bilmiyorum (2 tane kolay). Bu konuda biraz ışık tutabilirse memnun olurum.