当前位置: 首页 > 知识库问答 >
问题:

为什么简单地[myHighlight]=“...”为属性指令工作?

彭琛
2023-03-14
selector: '[myHighlight]',
@Input('myHighlight') highlightColor: string;

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

<span myHighlight [myHighlight]="color">highlight me</span>

相反,我们只需要指定input属性,就可以神奇地得到指令:

<span [myHighlight]="color">highlight me</span>

我不喜欢这个“快捷方式”/语法糖/魔法,因为它看起来像是绑定到span元素的myhlight属性,而不是实际发生的事情:我们绑定到myhlight属性指令的myhlight属性。因此,仅仅通过查看HTML,我们不能很容易地确定MyHighlight属性绑定到哪个元素/组件/指令。

<div [accessKey]="...">

accesskey是HTML元素属性还是带有输入属性的属性指令,该属性属性也名为accesskey?(仅供参考,accesskey是有效的HTML元素属性,因此本例不是属性指令。)

回到高亮指示...如果将输入属性名称更改为HighlightColor:

@Input() highlightColor: string;

然后,我必须指定属性选择器和属性绑定,我发现它不那么含糊:

<span myHighlight [highlightColor]="color">highlight me</span>
<p *ngIf="condition">
  text here
</p>

相当于

<template [ngIf]="condition">  <--- binds input property ngIf to NgIf directive, not to template
  <p>
    text here
  </p>
</template>

我只是不喜欢属性名称和选择器的混合。

共有1个答案

牟恺
2023-03-14

在NG-CONF2016上,我和Alex Rickabaugh谈了我的担忧,Alex Rickabaugh是棱角团队的成员之一。他指出,语法在其他方面也是模棱两可的。例如,我们讨论了以下语法:

<my-comp [whatIsThis]="someProperty">

通过阅读HTML我们无法判断WhatishThe是否是具有相同名称的输入属性的指令,或者WhatishThe是否是my-comp组件的输入属性。

我想底线是,在Angular 2中,我们不能简单地通过查看HTML来理解发生了什么样的绑定。我们必须了解应用程序使用的指令和组件。倒霉。

 类似资料:
  • 问题内容: 请考虑以下来自Shiro 界面的API方法,但也可能存在于其他库中: 是的,即使是现在,仍然有一些库使用原始类型,可能是为了保留Java 1.5之前的兼容性? 如果我现在想将此方法与流或类似的可选项一起使用: 我收到有关未经检查的转换和使用原始类型的警告,我更喜欢使用参数化类型。 蚀: 类型安全:方法collect(Collector)属于原始类型Stream。泛型类型Stream 的

  • 问题内容: 根据API文档,伪指令的属性已弃用,因此将来,所有伪指令的行为都将使用当前默认值。 这消除了开发人员替换element指令的element的能力,而没有明显替代此功能的能力。 有关如何使用元素指令和不使用元素指令的示例,请参见此示例。 为什么不推荐使用此有用的属性而不进行替换? 问题答案: 在下一个主要的Angular版本中,将删除用于定义替换其所在元素的指令的标志。此功能具有难以理解

  • 几个小时前我刚刚安装了WebStorm 8。我一直在写一些AngularJS的东西,我有一个相当烦人的小问题。AngularJS插件似乎部分工作,每当我键入ng时,我都会得到一个智能感知弹出窗口,显示所有各种ng-*属性。然而,这就是事情停止工作的地方。我似乎没有在.js文件或.html文件中获得更高级的智能感知功能。如果我在app.js中创建一个名为“app”的角度模块,那么当我在HTML文件中

  • 考虑下面的API方法,它取自Shiro的接口,但也可能存在于其他库中: 是的,即使是现在,仍然有库使用原始类型,可能是为了保持Java 1.5之前的兼容性?! 如果我现在想将此方法与流或选项一起使用,如下所示: 我收到一条关于未经检查的转换和使用原始类型的警告,我更喜欢使用参数化类型。 日食: 类型安全:收集(Collector)方法属于原始类型Stream javac: 注意:GenericsT

  • 例如,Angular 2内置的属性指令ngClass和ngStyle,可以在任何组件或元素上工作。

  • 我们可以直接将一个字符串绑定到属性。这就像添加一个html属性一样。 View Example 在这里,由于我们使用表达式绑定到指令,我们需要在方括号中包装指令名称。当你想有一个函数放在适用的类名列表时,传入数组是很有用的。 View Example 在这里我们可以看到,由于对象的 和属性是true,这些classes将会生效,但由于是false,它不会生效。