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

Whe*_*hee 9 angularjs

scope: {
    someProperty: "=?"
    somePropertyTwo: =?Wheeeeee
}
Run Code Online (Sandbox Code Playgroud)

什么是"=?" 做?我无法在任何地方找到答案.我理解使用范围:{}(或范围: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
Run Code Online (Sandbox Code Playgroud)

但是,我不明白为什么/为什么使用"=?".

相关文章(只覆盖前三): http://www.undefinednull.com/2014/02/11/mastering-the-scope-of-a-directive-in-angularjs/ HTTP://weblogs.asp达网络/ dwahlin /创建定制-angularjs-指令部分-2-分离-范围

编辑:这些是一样的吗?

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

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

Mic*_*ord 11

它只是意味着双向绑定是可选的.如果使用=then 定义属性,则必须为其提供有效绑定.来自$compile 文档:

(...)如果父范围属性不存在,则会抛出NON_ASSIGNABLE_MODEL_EXPRESSION异常.你可以使用=?避免这种行为?或=?attr以便将属性标记为可选.如果你想浅看变化(即$ watchCollection而不是$ watch)你可以使用=*或= attr(=?或=*?attr,如果属性是可选的).

  • @Whee 当本地属性的名称与 HTML 中的属性不同时,您将使用 `=?attr`。当您使用 `=?` 时,Angular 假定属性名称与属性名称相同。 (2认同)

Ton*_*hen 6

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

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