热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于Angular的属性绑定,[]和{{}}的差异

当我们查看Angular的代码,需要给属性绑定一个变量时,一会用[property]variable,一会用property{{variable}},有时候还有[attr.prop

当我们查看Angular的代码,需要给属性绑定一个变量时,一会用
[property]="variable",一会用
property="{{variable}}",有时候还有
[attr.property],究竟他们有什么区别?

先把结论搁在这
Angular 官方文档在绑定属性几乎都是使用[],而插值表达式{{}}更多是用于显示,两者最大的区别就是后者会将{{}}语句里执行完的值再转换string 类型。

[] & {{}}

实践是检验真理的唯一标准,先写一个简单的测试component

@Component({
selector: 'my-here',
template: `
2333333333333333{{here}}`
})
export class HereComponent {
@Input() here: any;
@Input() whichone: string;
ngOnChanges(change){
console.log(this.here)
console.log(change)
}
}

使用它


---------------------------

poo是一个string,并且我们通过input 或者button 改变poo 的值,两者在页面的显示和在控制台的打印都正常,看起来并没有差异。
可是我们发现,当poo 还没赋值的时候,前者打印是的undefined,后者是”空字符串,估计是后者把undefined 换成”,却又并不是单纯的转换类型,因为undefined 转string 的话应该是字面量’undefined’,但是可以确定的是通过{{}}获得的一定是string 类型。

试试给poo 送一个object,{{}}得到的是”[object Object]”,证实了我们的猜想。
《关于Angular的属性绑定,[]和{{}}的差异》

[attr.Attribute] 和 基本属性

那Angular 里还有一种attribute 绑定,写法是[attr.Attribute]="variable",那这个[property]="variable"又有什么区别呢?
首先我们得搞清楚Dom的property(属性) 和 attribute(特性),简单来说

  • property指的是DOM中的属性,是Javascript里的对象;
  • attribute指的是HTML标签上的特性,它的值只能够是字符串;
  • DOM中的有一个attribute的属性,其中就是html标签上的特性列表;
  • 两者之间的数据绑定是单向的,更改attribute会同步到property,但反之则不然;
  • 更改property和attribute的值,都会将更新反映到HTML页面中;

例如有一个element var testElm = document.getElementById('test')
这个element 的id 特性是 testElm.getAttribute('id'),而它的id 属性是testElm.id
DOM element 只有基本特性会有一一对应的属性,例如id、title等,如果我们添加一个自定义特性diy

那么testElm.getAttribute('diy')或者testElm.attributes[1]就是它的diy 特性,但是它并没有对应的diy 属性,同样情况的还有一些ARIA attribute 和table 中的colspan/rowspan。

ARIA指可访问性,用于给残障人士访问互联网提供便利

对于自定义属性,H5有一个data-* 的特性,例如

div id="test" data-diy="whatever">

它的特性就是 testElm.getAttribute('diy'),而对应的属性则是 testElm.dataset.diy

ok,说回Angular,由于element没有这些属性,中括号[]的属性绑定语法自然不行,而且编译模板时会报错,所以对于非基本属性,Angular 提供了这种[attr.Attribute]="variable" 的特性绑定语法。

by the way,当property是基本属性时,使用[property]="variable"绑定属性,然后改变variable 的值,对应的attribute也会跟着属性同步,Angular应该是做了属性和特性的数据双向绑定的工作
所以只有property是基本属性,两者一样,例如[id][attr.id]的作用并无区别。

END and PS

道理我都懂,但为什么鸽子辣么大…..这有什么用呢,emmmmmm当然有,最常见的就是[property]="false"property="{{false}}"的差异,后者其实绑定的是’false’,一旦做if语句就有问题。

综上所诉,属性绑定最好还是用中括号,双大括号用于展示,如

{{obj | json}}
,实际上,在渲染视图之前,Angular 把这些插值表达式翻译成相应的属性绑定。
还有就是,它依然可以用于执行Angular的模板语法,例如property="{{fun()}}"property="{{a?b:c}}",只是它会做多一步:把return的值转换成string。

说到attribute 和 property,记录个坑,Input标签的maxlength 特性对应的是maxLength 属性,即使特性写成大写maxLength 如下,浏览器解析出来的依然是

所以写成[attr.maxlength]、[attr.maxLength]、[maxLength]都是可以,但是[maxlength]就不行,minlength/minLength一样。

Angular模板语法

DOM 中 Property 和 Attribute 的区别


推荐阅读
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • Final关键字的含义及用法详解
    本文详细介绍了Java中final关键字的含义和用法。final关键字可以修饰非抽象类、非抽象类成员方法和变量。final类不能被继承,final类中的方法默认是final的。final方法不能被子类的方法覆盖,但可以被继承。final成员变量表示常量,只能被赋值一次,赋值后值不再改变。文章还讨论了final类和final方法的应用场景,以及使用final方法的两个原因:锁定方法防止修改和提高执行效率。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 导出功能protectedvoidbtnExport(objectsender,EventArgse){用来打开下载窗口stringfileName中 ... [详细]
  • 在JavaScript中,函数没有重载的概念,如果声明了多个重名的函数,不管函数的形参个数是否一样,只有最后一个有效。如果调用函数时传入的参数个数与函数定义时的参数个数不符,会出现不同的情况。函数调用时,传入的参数个数少于函数定义时的参数个数,未传入的参数会被当做undefined处理,可能会导致错误。而传入的参数个数多于函数定义时的参数个数,多余的参数不会被使用,但不会报错。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
author-avatar
fdsafjlkjgklg_431
这个家伙很懒,什么也没留下!
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有