我現在對AngularJS 1.5組件使用css模塊。該堆棧是webpack
+ css-loader?modules=true
+ angular 1.5 components
+ pug
。將AngularJS應用於css模塊的更好方法
目前我必須執行以下步驟在我的帕格模板中使用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
的想法是:
- 使
angular.module().component
支持額外的styles
屬性,它會自動完成(2)this.styles = styles;
在控制器,並應用(1)$element.addClass()
以及。 - 指令
css-class
將$ctrl.styles
應用於元素。
我的問題是,我不知道如何實現上面的想法1(2很容易)。我很感激任何人都可以分享這一點。