当要把视图元素的属性 (property) 设置为模板表达式时,就要写模板的属性 (property) 绑定。

Angular的属性绑定是单向数据绑定,因为值的流动是单向的,从组件的数据属性流动到目标元素的属性。
对于属性绑定,你应该做到以下几点:

  • 不可以使用属性绑定来从目标元素拉取值

  • 不可以从绑定目标元素的属性来读取它

  • 不可以使用元素绑定来调用目标元素上的方法

  • 你只可以设置属性绑定.

如果这个元素触发了事件,可以通过事件绑定来监听它们。
如果必须读取目标元素上的属性或调用它的某个方法,得用另一种技术。 参见 API 参考手册中的 ViewChild 和 ContentChild。


属性绑定的方式

  1. 使用[]进行绑定
  2. 使用bind-进行绑定

以绑定DOM属性到组件为例:

目标属性被[]包裹着。
组件属性被""包裹着。
至于目标属性和组件属性是什么,在下面属性绑定的用法中你可以领会到。
现在你只需要知道:

<img [src]="heroImageUrl">

等同于

<img bind-src="heroImageUrl">

属性绑定的用法

用法1:

绑定DOM属性到组件
语法:<htmlElement [DOM属性]='组件的属性'> </htmlElement>
举例:

<img [src]="heroImageUrl">

在这个例子中image 元素的src属性会被绑定到组件的heroImageUrl属性上。

用法2:

绑定指令属性到组件
语法:<htmlElement [指令属性]='组件的属性'> </htmlElement>
举例:

<div [ngClass]="classes">[ngClass] binding to the classes property</div>

Angular 会先去看这个名字是否是某个已知指令的属性名,然再去看是否为DOM属性。

严格来说,Angular 正在匹配指令的输入属性的名字。 这个名字是指令的inputs数组中所列的名字,或者是带有@Input()装饰器的属性。 这些输入属性被映射为指令自己的属性。

在这个例子中,ngClass指令属性会被绑定到组件的classes属性上。

注意:

如果名字没有匹配上已知指令或元素的属性,Angular 就会报告“未知指令”的错误。

用法3:

绑定自定义组件的模型属性
语法:<user-defined-tag [指令属性]='组件的属性'> </user-defined-tag>
举例:

<hero-detail [hero]="currentHero"></hero-detail>

用法4:

属性绑定和插值表达式
很多情况下,使用插值表达式跟属性绑定的效果相同:

<img src="{{heroImageUrl}}"> 

等效于

<img [src]="heroImageUrl">

但是这种情况仅仅存在于数据类型是字符串时,如果是其他数据类型,就必须使用属性绑定了。


attribute绑定(特性绑定)

attributeproperty都可以翻译成属性。但是前面所说的属性绑定是Property binding,而这里说的是attribute绑定

有什么不同呢?

小红书对这两个单词有不同的翻译,用以区别不同:

Property——属性
attribute——特性

简单的理解:

Attribute就是DOM节点自带的属性,例如html中常用的id、class、title、align.

Property是这个DOM元素作为对象,其附加的内容,
例如childNodesfirstChild.

常用的Attribute,例如idclasstitle等,已经被作为Property附加到DOM对象上,可以和Property一样取值和赋值。但是自定义的Attribute,就不会有这样的特殊优待。

因此,当元素没有属性可绑的时候,就必须使用 attribute 绑定。

考虑 ARIASVGtable 中的 colspan/rowspanattribute。 它们是纯粹的 attribute,没有对应的属性可供绑定。

如果想写出类似下面这样的东西,现状会令我们痛苦:

<tr><td colspan="{{1 + 1}}">Three-Four</td></tr>

会得到这个错误:

Template parse errors:
Can't bind to 'colspan' since it isn't a known native property
(模板解析错误:不能绑定到 'colspan',因为它不是已知的原生属性)

正如提示中所说,<td>元素没有colspan属性。它只有colspan特性,但是插值表达式和属性绑定只能设置属性,并不能设置特性attribute


attribute 绑定

我们需要 attribute 绑定来创建和绑定到这样的 attribute

attribute 绑定的语法与属性绑定类似。

但方括号中的部分不是元素的属性名,而是由attr前缀,一个点 (.) 和 attribute 的名字组成。 可以通过值为字符串的表达式来设置 attribute 的值。

这里把[attr.colspan]绑定到一个计算值:

<table border=1><!--  expression calculates colspan=2 --><tr><td [attr.colspan]="1 + 1">One-Two</td></tr><!-- ERROR: There is no `colspan` property to set!<tr><td colspan="{{1 + 1}}">Three-Four</td></tr>--><tr><td>Five</td><td>Six</td></tr>
</table>

这里是表格渲染出来的样子:

attribute 绑定的主要用例之一是设置 ARIA attribute(译注:ARIA指可访问性,用于给残障人士访问互联网提供便利), 就像这个例子中一样:

<!-- create and set an aria attribute for assistive technology -->
<button [attr.aria-label]="actionName">{{actionName}} with Aria</button>

参考资料:
Angular中文官网
DOM元素的特性(Attribute)和属性(Property)

Angular2属性绑定相关推荐

  1. Angular2+ 属性绑定

    前言 当要把视图元素的属性 (property) 设置为模板表达式时,就要写模板的属性 (property) 绑定. Angular的属性绑定是单向数据绑定,因为值的流动是单向的,从组件的数据属性流动 ...

  2. Angular开发(三)-关于属性绑定与事件绑定

    一.新建一个项目工程并创建一个组件bind,如果还有不知道怎么创建angular项目的请先查看Angular2从环境搭建到开发建议直接用angular-cli创建 二.数据绑定 插值的方式[比较常见] ...

  3. java mvc 绑定_关于Java:Spring MVC:将请求属性绑定到控制器方法参数

    在Spring MVC中,很容易将请求参数绑定到处理请求的方法参数. 我只是使用@RequestParameter("name"). 但是我可以对request属性做同样的事情吗? ...

  4. 用DataBindings属性绑定控件的值

    WinForm中的很多控件,如Label.TextBox等都包含DataBindings属性,其类型为ControlBindingsCollection,是Binding类的集合.Binding类代表 ...

  5. Ember.js 入门指南——handlebars属性绑定

    2019独角兽企业重金招聘Python工程师标准>>> 本文从http://www.ibeginer.sinaapp.com迁移过来,欢迎访问原页面. 简单讲属性绑定其实就是在HTM ...

  6. 案例:简单计算器|| 属性绑定||v-model指令的本质||样式绑定

    需求:实现简单的加法计算,分别输入数值a和数值b ,点击计算按钮,结果显示在下面. <!DOCTYPE html> <html lang="en"> < ...

  7. a标签居中 img vue_Vue中img的src属性绑定与static文件夹实例

    不少人在vue的开发中遇到这样一个问题: img的src属性绑定url变量,然而图片加载失败. 大部分的情况中,是开发者使用了错误的写法,例如: 这样写肯定是不对的,正确的写法应该使用v-bind: ...

  8. VUE基本语法1-插值 属性绑定

    .1 插值绑定 插值绑定是Vue中最常见.最基本的语法,绑定的内容主要有文本插值和HTML插值两种 文本插值 文本插值的方式十分简单,只要用双大括号(Mustache语法)将要绑定的变量.值.表达式括 ...

  9. Vue.js-Day01-PM【事件绑定(事件传参、事件对象、传参+获取事件对象)、样式处理操作(模板、事件、属性绑定)、Tab切换(原生js实现、Vue.js实现)、js中的this详解关键字】

    Vue.js实训[基础理论(5天)+项目实战(5天)]博客汇总表[详细笔记] 目   录 4.事件绑定 4.1.事件绑定(点击.双击.鼠标移动) 点击按钮-最简单的事件绑定(无参函数) 格式 点击按钮 ...

最新文章

  1. Spring Boot 2.x基础教程:使用@Scheduled实现定时任务
  2. 百度谷歌等联合推出机器学习基准 加速AI软硬件发展
  3. java中字符与字节的编码关系
  4. mac下的抓包工具Charles
  5. 单例模式存在的问题——破坏单例模式,序列化和反射
  6. 转发一个深度、实用的技术帖——实现ADM3251E与3.3V系统的RS-232接口隔离
  7. Java:由浅入深揭开 AOP 实现原理
  8. 清华大学上海交大,复制粘贴般的优秀!
  9. MySQL如何用一条SQL将一张表里的数据插入到另一张表
  10. 深度探索QT窗口系统——几何篇
  11. 刷题记录 CF每日一题打卡 2020.6月7-6月13
  12. Android模拟器读取GPS串口模拟器GPS数据
  13. 百度地图 3.0 WEB离线开发
  14. 随机预言机模型与标准模型
  15. cython使用说明
  16. win10 excel和ppt变成英文了,word正常,怎么解决?
  17. Dojo的联合创建者Dylan Schiemann访谈
  18. 常见数据类型的散列函数
  19. Godot游戏开发实践之一:使用High Level Multiplayer API制作多人游戏(上)
  20. 亲历2012百度开发者大会

热门文章

  1. 伦敦的威斯敏斯特大教堂地下室的墓碑林中,一块震撼全世界的一段碑文。
  2. OBS直播时编码器、码率控制器、分辨率帧率是什么以及如何向第三方推流
  3. Xml字符串转Map
  4. filters过滤器的简单使用
  5. 2n 用c语言编程程序,用C语言编写程序.ppt
  6. 利用mathematica画多个函数图像
  7. 排列组合C几几怎么算
  8. 算法分析一:基础知识
  9. 显卡不装驱动也能使用的原因
  10. JDK源码解析 - java.util.ArrayList