Angular Directive的隔离范围的可选双向绑定

时间:2014-11-07 15:21:22

标签: binding angularjs-directive angularjs-scope transclusion

问题

我刚刚了解到你可以通过以下方式获得可选的“反向”或回调绑定:

scope: { parentScopeFunc: '&?' }

我试图看看是否有办法用双向绑定做类似的事情。

scope: { optional2WayBoundProp: '=?' }

我尝试使用链接功能element& attrs参数,但后来我失去了回到父母的双向约束。该方法仅允许父对子更新。然后我不妨使用@范围机制。

修改

我发现了这个问题Angular JS directive, change a 2 way data binding in the link function,以便回答有关=?的主要问题。但是,它无法解决truefalse等“可选”非约束值。

的目标

这就是我想要完成的事情:

  • 编写一个转换内容的面板指令,除标题区域外可以折叠:
    <my-panel> <transcluded-header-content/> <button ng-click="toggleCollapse()"/> <transcluded-body-content ng-if="isExpanded"/> </my-panel>

  • 在某些情况下,我想在父作用域中缓存面板实例的折叠状态(因此视图的控制器可以确定如何缓存此信息的双向绑定):

    <my-panel is-expanded="parentScopeProp">

  • 在其他情况下,我可能只想声明它而不绑定到父作用域属性或者我可能根本不会声明它,在这种情况下它假定它已扩展。

    <my-panel is-expanded="true/false">

我了解到,通过使用=作业,undefinedtrue和&amp;无法评估false

1 个答案:

答案 0 :(得分:36)

'=?'是从ng 1.2.x开始的有效范围分配...

...至于是否有能够从可选的双向绑定中插入表达式的能力,这仍然可以用于获取。