当要把视图元素的属性 (property) 设置为模板表达式
时,就要写模板的属性 (property) 绑定
。
Angular的属性绑定是单向数据绑定
,因为值的流动是单向
的,从组件的数据属性
流动到目标元素
的属性。
对于属性绑定,强调以下几点:
如果这个元素触发了事件,可以通过事件绑定来监听它们。
如果必须读取目标元素上的属性或调用它的某个方法,得用另一种技术。 参见 API 参考手册中的 ViewChild
和 ContentChild
。
[]
进行绑定bind-
进行绑定以绑定DOM属性到组件为例:
目标属性被[]
包裹着。
组件属性被""
包裹着。
现在你只需要知道:
等同于
用法1:
绑定DOM属性到组件
语法:
举例:
在这个例子中image 元素的src
属性会被绑定到组件的heroImageUrl
属性上。
用法2:
绑定指令属性到组件
语法:
举例:
[ngClass] binding to the classes property
Angular 会先去看这个名字是否是某个已知指令
的属性名,然再去看是否为DOM属性
。
严格来说,Angular 正在匹配指令的输入属性的名字。 这个名字是指令的inputs数组中所列的名字,或者是带有@Input()装饰器的属性。 这些输入属性被映射为指令自己的属性。
在这个例子中,ngClass指令属性会被绑定到组件的
class`属性上
注意:
如果名字没有匹配上已知指令或元素的属性,Angular 就会报告“未知指令”的错误。
用法3:
绑定自定义组件的模型属性
语法:
举例:
用法4:
属性绑定和插值表达式
很多情况下,使用插值表达式
跟属性绑定
的效果相同:
等效于
但是这种情况仅仅存在于数据类型是字符串
时,如果是其他数据类型,就必须使用属性绑定了。
attribute
和property
都可以翻译成属性。但是前面所说的属性绑定是Property binding
,而这里说的是ttribute绑定
。
小红书对这两个单词有不同的翻译,用以区别不同:
Property——属性
attribute——特性
简单的理解:
Attribute
就是DOM节点自带的属性,例如html中常用的id、class、title、align.
Property
是这个DOM元素作为对象,其附加的内容, 例如childNodes、firstChild.
注意:
常用的Attribute,例如id、class、title等,已经被作为
Property附加到DOM对象上,可以和Property一样取值和赋值。但是自定义
的Attribute,就不会有这样的特殊优待。
因此,当元素没有属性可绑的时候,就必须使用 attribute 绑定。
考虑 ARIA, SVG 和 table 中的 colspan/rowspan 等 attribute。它们是纯粹的 attribute,没有对应的属性可供绑定。
如果想写出类似下面这样的东西,现状会令我们痛苦:
Three-Four
会得到这个错误:
Template parse errors:
Can't bind to 'colspan' since it isn't a known native property
(模板解析错误:不能绑定到 'colspan',因为它不是已知的原生属性)
正如提示中所说,元素没有colspan属性。它只有colspan特性,但是插值表达式和属性绑定只能设置属性,并不能设置特性attribute。
我们需要attribute 绑定
来创建和绑定到这样的 attribute。
attribute 绑定的语法与属性绑定类似。
但方括号中的部分不是元素的属性名
,而是由attr前缀
,一个点 (.
) 和attribute 名字
组成。 可以通过值为字符串表达式
来设置 attribute 的值。
这里把[attr.colspan]绑定到一个计算值:
One-Two
Five Six
attribute 绑定的主要用例之一是设置 ARIA attribute(译注:ARIA指可访问性,用于给残障人士访问互联网提供便利
), 就像这个例子中一样:
作者:maomaolaoshi
原文:https://blog.csdn.net/maomaolaoshi/article/details/75158606