【问题标题】:" =? " in Angular Directive Isolate ScopeAngular 指令隔离范围中的“=?”
【发布时间】:2015-04-10 01:35:52
【问题描述】:
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

edit:和这些一样吗?

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

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

【问题讨论】:

    标签: angularjs


    【解决方案1】:

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

    (...) 如果父作用域属性不存在,它会抛出一个 NON_ASSIGNABLE_MODEL_EXPRESSION 异常。您可以避免这种行为 使用 =?或 =?attr 以将属性标记为可选。如果你 想要浅层观察变化(即 $watchCollection 而不是 $watch) 你可以使用 =* 或 =attr (=? 或 =*?attr 如果属性是 可选)。

    【讨论】:

    • 这回答了我的问题,谢谢。但是,我不明白何时使用 =? vs =?attr.
    • @Whee 离开 attr 只是告诉 Angular 使用范围属性名称。所以foo: '=?foo'foo: '=?'是一样的
    • @Whee 当本地属性的名称与 HTML 中的属性不同时,您将使用 =?attr。当您使用=? 时,Angular 假定属性名称与属性名称相同。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-26
        • 1970-01-01
        相关资源
        最近更新 更多