AngularJS指令数据绑定中的 <? 符号是什么含义?
AngularJS 指令中
<? 绑定符号的作用 <? 是 AngularJS 1.5 及以上版本提供的可选单向输入绑定语法,由两个独立的绑定标识组合生效:
- 基础标识
<:代表单向数据绑定,只会把父作用域的属性值同步到指令/组件的隔离作用域中,反过来指令内部修改该属性值不会同步回父作用域。和传统的=双向绑定相比性能更好,也能避免父作用域属性被意外修改的问题,是 AngularJS 后期版本推荐的数据流绑定方案。 - 可选标识
?:代表该输入绑定为非必填项,如果父作用域没有传递对应的属性,指令内部该属性的值会默认设为undefined,不会抛出绑定缺失的报错。如果不加?标识,父组件未传对应属性时 AngularJS 会直接抛出异常。
代码示例
定义组件时声明绑定规则:
angular.module('myApp').component('userCard', { bindings: { // 声明userName为可选的单向输入属性 userName: '<?', userAvatar: '<' // 不带?为必填项,父组件不传会报错 }, controller: function() { this.$onInit = function() { // 父组件未传userName时输出undefined,不会触发框架报错 console.log('用户名:', this.userName) } } })
调用组件时两种写法都合法:
<!-- 传值场景 --> <user-card user-name="currentUser.name" user-avatar="currentUser.avatar"></user-card> <!-- 非必填参数不传场景,不会报错 --> <user-card user-avatar="guestAvatar"></user-card>
该语法通常用在非必填的组件入参场景下,既保留了单向绑定的数据流可控性和性能优势,又避免了可选参数未传递导致的运行时异常,可完全替代之前版本常用的
=?双向可选绑定写法。
内容的提问来源于stack exchange,提问作者dev'd
相关产品推荐
相关产品推荐

