" =? "在Angular Directive隔离范围

时间:2015-04-10 01:35:53

标签: angularjs

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/ $编译#-require -

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

3 个答案:

答案 0 :(得分:9)

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

  

(...)如果父范围属性不存在,它将抛出一个   NON_ASSIGNABLE_MODEL_EXPRESSION异常。您可以避免此行为   使用=?或=?attr以便将属性标记为可选。如果你   想要浅见变化(即$ watchCollection而不是   $ watch)你可以使用= *或= attr(= ?或= *?attr,如果属性是   可选)。

答案 1 :(得分:3)

“=?”只是可选的“=”。

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

答案 2 :(得分:0)

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

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

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