为什么简单地 [myHighlight]=“..."为属性指令工作? [英] Why does simply [myHighlight]="..." work for an attribute directive?

查看:16
本文介绍了为什么简单地 [myHighlight]=“..."为属性指令工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

dev 中的 myHighlight 属性指令guide 使用 myHighlight 名称作为属性选择器:

selector: '[myHighlight]',

和一个输入属性:

@Input('myHighlight') highlightColor: string;

我觉得奇怪/违反直觉,我们不必像这样指定选择器属性(尽管如果我们这样写,它仍然有效):

<span myHighlight [myHighlight]="color">突出显示我</span>

相反,我们只需要指定 input 属性,我们也神奇地获得了指令:

<span [myHighlight]="color">突出显示我</span>

我不喜欢这个快捷方式"/语法糖/魔法,因为它看起来我们绑定到 span 元素的 myHighlight 属性,而不是而不是实际发生的事情:我们绑定到 myHighlight 属性指令的 myHighlight 属性.因此,仅通过查看 HTML,我们无法轻松确定 myHighlight 属性绑定到哪个元素/组件/指令.

为什么会这样?

考虑这个 HTML 片段:

accessKey 是一个 HTML 元素属性还是一个属性指令,其输入属性也名为 accessKey?(仅供参考,accessKey 是有效的 HTML 元素属性,因此此示例不是属性指令.)

回到高亮指令...如果我将输入属性名称更改为 highlightColor:

@Input() highlightColor: string;

然后我必须指定属性选择器和属性绑定,我觉得这不太模糊:

<span myHighlight [highlightColor]="color">突出显示我</span>

因此,快捷方式"似乎仅在输入属性名称与属性选择器匹配时才有效.

更新:似乎结构指令 使用相同的技巧/捷径.例如,

在这打字</p>

相当于