Angular 1.5+组件可选单向绑定
Angular 1.5+ component optional one-way binding
摘自 AngularJS 1 documentation:
You can also make the binding optional by adding ?
: <?
or <?attr
.
对于单向绑定,可选的与非可选的有何不同?
我似乎可以在我的 fiddle 上找出可选版本的双向 (=
) 和委托 (&
) 绑定的区别:https://jsfiddle.net/glenn/ze2wo0s1/,但不是单向的。
顺便说一句,圣诞快乐! ❤️
您可以在源代码中查看它的处理方式:https://github.com/angular/angular.js/blob/master/src/ng/compile.js#L3523。
对我来说,如果您使用 <?
并将绑定设为可选,它会提前中断而无需设置手表。如果使用 use <
并将其设为必需,它会将绑定设置为 undefined
并设置监视。但是,它似乎只是在监视 undefined
,所以在实践中,除了对 recordChanges
的一次调用外,没有任何区别。如果您省略了必需的绑定,则必需的绑定将是 changes
对象中的一个键,该对象在第一次调用时传递给 $onChanges
挂钩。但是,当您省略可选绑定时,它将不是 changes
对象中的键。
有关示例,请参阅此 JSFiddle。 requiredBinding
和 optionalBinding
都被省略,因此被初始化为 undefined
,但是 requiredBinding
是 change
对象上的键,而 optionalBinding
不是。
使用 <?
可以让控制器更改应该绑定的变量的值,前提是该变量不存在。
当可选绑定不存在时,可以在控制器中对其进行修改。如果该值已传递给组件,则无法更改它。
非可选绑定无法进行任何修改。如果不存在,则为undefined
,根本无法修改。
例如,假设您有这个:
bindings: {
nameOptional: '<?',
nameRequired: '<'
}
在控制器中,您不能简单地$ctrl.nameRequired = 'something else'
并期望视图得到更新。但是,您 可以 对 nameOptional
执行相同的操作,但有一个条件:仅当 name-optional
未传递给组件时。只有这样变量才是控制器要改变的。
为了更好地理解您可以参考this fiddle。
请注意,为了简化操作,我们使用按值传递的字符串。如果您正在传递对象,则对象的属性在正常情况下始终可以被修改。
摘自 AngularJS 1 documentation:
You can also make the binding optional by adding
?
:<?
or<?attr
.
对于单向绑定,可选的与非可选的有何不同?
我似乎可以在我的 fiddle 上找出可选版本的双向 (=
) 和委托 (&
) 绑定的区别:https://jsfiddle.net/glenn/ze2wo0s1/,但不是单向的。
顺便说一句,圣诞快乐! ❤️
您可以在源代码中查看它的处理方式:https://github.com/angular/angular.js/blob/master/src/ng/compile.js#L3523。
对我来说,如果您使用 <?
并将绑定设为可选,它会提前中断而无需设置手表。如果使用 use <
并将其设为必需,它会将绑定设置为 undefined
并设置监视。但是,它似乎只是在监视 undefined
,所以在实践中,除了对 recordChanges
的一次调用外,没有任何区别。如果您省略了必需的绑定,则必需的绑定将是 changes
对象中的一个键,该对象在第一次调用时传递给 $onChanges
挂钩。但是,当您省略可选绑定时,它将不是 changes
对象中的键。
有关示例,请参阅此 JSFiddle。 requiredBinding
和 optionalBinding
都被省略,因此被初始化为 undefined
,但是 requiredBinding
是 change
对象上的键,而 optionalBinding
不是。
使用 <?
可以让控制器更改应该绑定的变量的值,前提是该变量不存在。
当可选绑定不存在时,可以在控制器中对其进行修改。如果该值已传递给组件,则无法更改它。
非可选绑定无法进行任何修改。如果不存在,则为undefined
,根本无法修改。
例如,假设您有这个:
bindings: {
nameOptional: '<?',
nameRequired: '<'
}
在控制器中,您不能简单地$ctrl.nameRequired = 'something else'
并期望视图得到更新。但是,您 可以 对 nameOptional
执行相同的操作,但有一个条件:仅当 name-optional
未传递给组件时。只有这样变量才是控制器要改变的。
为了更好地理解您可以参考this fiddle。
请注意,为了简化操作,我们使用按值传递的字符串。如果您正在传递对象,则对象的属性在正常情况下始终可以被修改。