ng-transclude中的ng-model

时间:2014-07-11 15:56:10

标签: javascript angularjs data-binding

ng-model内使用ng-transclude时出现问题。

ng-transclude创建子范围时,不能再将值设置为外部范围。

如果没有ng-transclude,一切正常:

{{text}}
<div>
  <textarea ng-model="text"></textarea>
</div>

使用ng-transclude时,文本不会更新,因为textarea仅修改子范围:

{{text}}
<pane>
   <textarea ng-model="text"></textarea>
</pane>

http://plnkr.co/edit/GKf7WhnnItVNeBpvSB0F?p=preview

还有其他方式使用ng-model="$parent.text"吗?

1 个答案:

答案 0 :(得分:10)

因为$ parent可能引用不同的范围,具体取决于上下文,建议您声明一个对象来保存您要写入的属性(例如$scope.data = {text: "foo"};),这样当ng-时model试图写入值(通过ng-model="data.text"),它必须首先进行“读取”,查看原型链,直到它最终达到所需范围内的“数据”属性(假设有没有其他具有该属性的范围)。

此方法遵循"always use the dot in ng-model"规则。

(旁注:另一种可能的方法是使用控制器的别名,假设它在你正在使用的角度版本中可用)。

<div ng-controller="ExampleController">
    {{my.text}}
    <pane>
      <textarea ng-model="my.text"></textarea>
    </pane>
  </div>

http://plnkr.co/edit/aESrHtuSH9cd9ljyQAfH?p=preview