Chỉ thị myHighlight
thuộc tính trong dev guide sử dụng tên myHighlight
như cả bộ chọn thuộc tính:Tại sao [myHighlight] = "..." chỉ hoạt động cho một chỉ thị thuộc tính?
selector: '[myHighlight]',
và một tài sản đầu vào:
@Input('myHighlight') highlightColor: string;
Tôi tìm thấy nó lẻ/phản trực giác rằng chúng tôi không có để chỉ định thuộc tính bộ chọn như thế này (mặc dù nếu chúng tôi viết theo cách này, nó vẫn hoạt động):
<span myHighlight [myHighlight]="color">highlight me</span>
.210
Thay vào đó, chúng tôi chỉ có để xác định tài sản đầu vào, và chúng tôi kỳ diệu có được chỉ thị cũng như:
<span [myHighlight]="color">highlight me</span>
Tôi không thích điều này "shortcut"/cú pháp đường/kỳ diệu, vì nó trông giống như chúng tôi gắn lại với thuộc tính myHighlight
của phần tử span
, thay vì những gì đang thực sự xảy ra: chúng tôi liên kết với thuộc tính myHighlight
của chỉ thị thuộc tính myHighlight
. Vì vậy, chỉ cần nhìn vào HTML, chúng ta không thể dễ dàng xác định phần tử/thành phần/chỉ thị thuộc tính myHighlight
nào bị ràng buộc.
Tại sao nó hoạt động theo cách này?
Hãy xem xét đoạn HTML này:
<div [accessKey]="...">
là accessKey
một đặc tính phần tử HTML hoặc một chỉ thị thuộc tính với một tài sản đầu vào cũng có tên accessKey
? (. FYI, accessKey
là một tài sản phần tử HTML hợp lệ, vì vậy ví dụ này không phải là một chỉ thị thuộc tính)
Bắt trở lại chỉ thị nổi bật ... nếu tôi thay đổi tên tài sản đầu vào highlightColor
:
@Input() highlightColor: string;
Sau đó, tôi phải chỉ rõ bộ chọn thuộc tính cùng với thuộc tính ràng buộc, mà tôi tìm thấy ít mơ hồ:
<span myHighlight [highlightColor]="color">highlight me</span>
Vì vậy, các "shortcut" dường như chỉ có tác dụng nếu các tên thuộc tính đầu vào phù hợp với selector thuộc tính.
Cập nhật: có vẻ như structural directives sử dụng cùng một mẹo/lối tắt. Ví dụ:
<p *ngIf="condition">
text here
</p>
tương đương với
<template [ngIf]="condition"> <--- binds input property ngIf to NgIf directive, not to template
<p>
text here
</p>
</template>
Tôi chỉ không thích sự pha trộn của tên thuộc tính và chọn.
Tôi vừa xem tài liệu. Có một số công cụ tinh tế đang diễn ra ở đó: "Trình trang trí @Input này thêm siêu dữ liệu vào lớp làm cho thuộc tính highlightColor có sẵn cho thuộc tính ràng buộc dưới bí danh myHighlight". Ngoài ra điều này: https://angular.io/docs/ts/latest/guide/attribute-directives.html#!#why-input –
Nó chỉ là một trong những [selectors] có thể (https://github.com/angular /angular/blob/master/modules/angular2/src/compiler/selector.ts#L15). Bạn có thể sử dụng cái phù hợp hơn cho bạn. –
Tôi nghĩ rằng [PR] (https://github.com/angular/angular/pull/5914) cũng có thể liên quan. –