角度指令隔离范围内的" =? "


scope: {
    someProperty: "=?"
    somePropertyTwo: =?Wheeeeee
}

"=?"有什么作用?我在任何地方都找不到答案。我知道使用 scope: {}(或 scope: true(会给指令一个新的范围,前者是一个隔离范围,后者是单向绑定到父 Ctrl(使用该指令的页面/视图的 Ctrl(。我明白:

someProp: @X //will one-way bind someProp to parent Ctrl's X
someProp: =X //two-way
someProp: &X() //some space magic for binding methods

但是,我不明白如何使用" =? "。

相关文章(仅涵盖前三篇(:http://www.undefinednull.com/2014/02/11/mastering-the-scope-of-a-directive-in-angularjs/http://weblogs.asp.net/dwahlin/creating-custom-angularjs-directives-part-2-isolate-scope

编辑:它和这些一样吗?

? - 尝试找到所需的控制器或将 null 传递给链接 fn(如果未找到(。^ - 通过搜索元素及其父元素来找到所需的控制器。如果未找到,则抛出错误。https://docs.angularjs.org/api/ng/service/$compile#-require-

即,如果未找到任何属性,则传递 null?

这只是意味着双向绑定是可选的。如果使用=定义属性,则必须为其提供有效的绑定。从$compile文档中:

(...如果父范围属性不存在,它将引发 NON_ASSIGNABLE_MODEL_EXPRESSION例外。您可以避免此行为 使用 =?或 =?attr 以将属性标记为可选。如果你 想要浅表观察变化(即$watchCollection而不是 $watch( 您可以使用 =* 或 =attr(=? 或 =*?attr,如果属性是 可选(。

">

=?"只是可选的"="。

它们是相同的,只是如果在使用此指令时错过了此属性,则不会发生错误,该范围将在内部正常使用。

AngularJS中的指令非常强大,但需要一些时间来理解它们背后的进程。在创建指令时,AngularJS允许您创建一个隔离的作用域,其中包含一些到父作用域的自定义绑定。这些绑定由 HTML 中定义的属性和指令定义对象中 scope 属性的定义指定。

有 3 种类型的绑定选项在 scope 属性中定义为前缀。前缀后跟 HTML 元素的属性名称。这些类型如下

文本绑定(前缀:@(单向绑定(前缀:&(双向绑定(前缀:=(

最新更新