2016-06-28 25 views
7

Tôi chỉ mới bắt đầu sử dụng Angular 2 và đã tự hỏi tại sao một số thuộc tính như selectortemplate được đặt trong các thành phần trang trí và không phải trong các lớp thành phần.Tại sao Angular 2 sử dụng trang trí?

Điểm của việc sử dụng tất cả các trang trí này trong Angular 2 là gì?

Trả lời

2
  • Để làm cho nó dễ dàng cho các công cụ để cung cấp tất cả các loại hỗ trợ trong các mẫu như:

    • kiểm tra lỗi
    • tự động hoàn thành
    • đồ họa thiết kế GUI
  • Để tạo mã từ trang trí cho phép:

    • để xác định một số điều khai báo nhiều hơn hoặc
    • tạo mã khác nhau tùy thuộc vào một số cấu hình (như sắp tới ẩn mẫu trình biên dịch hiện)

Mã sẽ cần phải được thực hiện để sử dụng biểu thức kết quả có thể phát ra. Trang trí có thể dễ dàng được đánh giá tĩnh mà không thực thi mã TypeScript (ngoại trừ một tập hợp con đơn giản và có giới hạn).

0

Nói chung, trang trí cho phép bạn thực hiện các chức năng. Ví dụ: @Component thực hiện chức năng Component được nhập từ Angular2. Dưới mui xe, trang trí như vậy xác định một số siêu dữ liệu trên lớp. Điều này cho phép bạn cấu hình lớp để "gắn cờ" nó như một thành phần. Angular2 sau đó có thể liên kết các bộ chọn trong các mẫu cho lớp đó.

Bài viết này có thể cung cấp cho bạn nhiều gợi ý về những gì xảy ra dưới mui xe:

Bạn có thể nhận thấy rằng trang trí có thể áp dụng trong nguyên cảo ở các cấp khác nhau (lớp, sở hữu lớp, phương pháp tham số).

+1

"Nói chung, trang trí cho phép bạn thực hiện các chức năng". Đó không phải là rất hữu ích. Ngôn ngữ lập trình cho phép bạn "Thực hiện các chức năng" ... – spinkus

4

Ngoài các câu trả lời dành riêng cho nền tảng đã có, tôi muốn tiếp tục xem xét chung hơn. Câu hỏi này, từ quan điểm của tôi, bằng cách nào đó liên quan đến việc quyết định lựa chọn mô hình trang trí trên thừa kế (ví dụ @Component vs extends Component)

Một số lợi ích của việc sử dụng trang trí là:

1. Tách mối quan tâm:

Thông tin bên trong trang trí là khai báo, chúng xác định hành vi của một lớp, rất có thể sẽ không thay đổi theo thời gian và được khung làm việc sử dụng. Các thuộc tính và trường lớp là dữ liệu theo lớp cụ thể, sẽ luôn được xử lý và cập nhật thường xuyên và chỉ có ý nghĩa trong chính lớp đó. Hai loại dữ liệu này không nên trộn lẫn với nhau.

2.Hỗ trợ nhiều sửa đổi

Nhiều ngôn ngữ ngăn nhiều thừa kế do Diamond problem. Mặt khác, một lớp có thể có nhiều trang trí cho các mục đích khác nhau (ví dụ: @Component và không được chấp nhận @RouteConfig)

+1

Tôi không thực sự mua đối số thứ hai. Trường hợp trong một Angular2 không sử dụng trang trí làm giảm bớt một vấn đề đa thừa kế? Vâng, trang trí tốt cho việc đánh dấu các lớp học với dữ liệu meta. Nhưng họ đã sử dụng em như khai báo lớp/kiểu. Lớp/loại thành phần luôn được mặc quần áo với \ @Component. Mô-đun luôn luôn có \ @NgModule và không có ý nghĩa gì khi đặt \ @Component vào bất kỳ thứ gì khác ngoài lớp Component hợp lý, vv IMHO nó là một quyết định thiết kế đáng ngờ. Không phải để nói không có lợi thế - giống như bất cứ điều gì. – spinkus

Các vấn đề liên quan