Tôi đang sử dụng các mô-đun css với các thành phần AngularJS 1.5 ngay bây giờ. Ngăn xếp là webpack
+ css-loader?modules=true
+ angular 1.5 components
+ pug
.Cách tốt hơn để áp dụng các mô-đun css vào AngularJS
Hiện tại tôi phải thực hiện các bước sau để sử dụng các mô-đun css trong mẫu pug của tôi.
// 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; }
Có hai vấn đề:
Mỗi thành phần có phải tiêm
$element
và đặt tên lớp của nó bằng tay. Lý do để làm điều này là, thẻ thành phần AngularJS tồn tại trong kết quả HTML mà không có bất kỳ lớp nào, điều này làm cho CSS trở nên khó khăn. Ví dụ, nếu tôi sử dụngMyComponent
trên như thế này:<div> <my-component></my-component> </div>
nó sẽ tạo ra mã HTML sau đây:
<div> <my-component> <div class="my-component__fooBar__3B2xz">FooBar</div> </my-component> </div>
So với ReactJS,
<my-component>
trong HTML kết quả trên là một phụ, đôi khi nó làm cho CSS khó khăn viết. Vì vậy, giải pháp của tôi là (1), để thêm một lớp vào nó.Lớp học trong mẫu quá dài (3). Tôi biết đó là cách chính xác để tham khảo
$ctrl.styles.fooBar
nhưng đây là cách quá dài.
giải pháp lý tưởng của tôi sẽ là như thế này:
// my-component.js
angular.module(name, deps)
.component('my-component', {
controller: MyComponent,
template: template,
styles: styles,
});
// my-component.css
div(css-class="fooBar") FooBar
Ý tưởng là:
- làm
angular.module().component
hỗ trợ thêm mộtstyles
thuộc tính, mà sẽ tự động làm (2)this.styles = styles;
trong bộ điều khiển và áp dụng (1)$element.addClass()
. - chỉ thị
css-class
để áp dụng$ctrl.styles
cho phần tử.
Câu hỏi của tôi là, tôi không biết cách triển khai ý tưởng 1 ở trên (2 thật dễ dàng). Tôi đánh giá cao nếu có ai có thể chia sẻ một số ánh sáng về điều này.