Giả sử chúng tôi muốn sử dụng thành phần từ một số thư viện trong angular2 (ví dụ: material2). Chú thích thành phần trông giống như sau:Kiểu mở rộng/ghi đè của thành phần angular2 có thể sử dụng lại
@Component({
moduleId: module.id,
selector: 'md-input',
templateUrl: 'input.html',
styleUrls: ['input.css'],
providers: [MD_INPUT_CONTROL_VALUE_ACCESSOR],
host: {'(click)' : 'focus()'}
})
Thành phần này có biểu định kiểu "mặc định", "input.css". Nếu chúng ta sử dụng thành phần này trong ứng dụng của mình, chúng ta có thể muốn ghi đè/mở rộng một số kiểu, mà không cần sao chép và thao tác thành phần đó. làm như thế nào?
Giải pháp 1: Đặt Đóng gói để "ViewEncapsulation.None":
Đây không phải là thực sự là một giải pháp, chỉ là một cách giải quyết khác.
Giải pháp 2: Sử dụng ":: shadow" hoặc "/ sâu /" trong CSS:
trình cũng có, nhưng nó bị phản đối theo WebComponent spec.
Giải pháp 3: Sử dụng CSS toàn cầu và ghi đè CSS phần:
trình cũng có, nhưng nó vi phạm các khái niệm bóng DOM.
Giải pháp 4: Override trực tiếp trong các mẫu của thành phần cha mẹ:
Ví dụ:
<my-cmp [font-size]="100"></my-cmp>
là không thực sự phù hợp nếu chúng ta làm được rất nhiều trọng.
Giải pháp 5: Ghi đè hoặc mở rộng "@Component" sắc nét với một stylesheet thêm bằng cách nào đó:
này có vẻ là giải pháp đúng chỉ (ít nhất là đối với tôi). Nhưng tôi không có ý tưởng làm thế nào để làm điều này ...
Bất kỳ lời khuyên nào về điều này? Có lẽ tôi đã nhận được một cái gì đó sai ... Cảm ơn.
nhờ làm rõ này – patrickkeller
Bạn nên biết rằng việc mở rộng trang trí sẽ không được hỗ trợ bởi các ẩn mẫu biên dịch và không được khuyến khích https://github.com/angular/angular/issue/7968 # issuecomment-223779992 –