在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"
吗?
答案 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>