问题在这里显示:http://jsfiddle.net/ews7S/
<input type="text" ng-model="testModel" dir="123">
当一个元素在控制器作用域中绑定到模型,并且您还向该元素添加具有自己本地作用域的指令时,则对模型的更改仅在指令作用域中更改。
问题在这里显示:http://jsfiddle.net/ews7S/
<input type="text" ng-model="testModel" dir="123">
当一个元素在控制器作用域中绑定到模型,并且您还向该元素添加具有自己本地作用域的指令时,则对模型的更改仅在指令作用域中更改。
另一种解决方案是使用对象作为模型,而不是基本类型。然后新指令的作用域将继承(原型继承)对该对象的引用,而不是基本类型的值的副本:
$scope.model = { testProp: "444" };
<input type="text" ng-model="model.testProp" dir="123">
<input type="text" ng-model="model.testProp">
document.getElementById("out").innerHTML = scope.model.testProp;
http://jsfiddle.net/mrajcok/awfU5/
使用一个基本类型,如 $scope.testModel,指令作用域的 testModel 属性会获得父作用域的 testModel 的值的 副本。对其中一方进行更改不会影响另一方。
使用一个对象,如 $scope.model,父作用域和指令作用域都有对同一个(一个)对象的引用。对其中任何一方所做的更改都会影响同一个对象。
另一种(脆弱的)解决方案是使用未公开文档的 $parent 属性(对问题 fiddle 进行这些更改):
<input type="text" ng-model="$parent.testModel" dir="123">
document.getElementById("out").innerHTML = scope.$parent.testModel;
请注意,使用$parent
是一种脆弱的解决方案,因为$parent
的使用取决于DOM结构。例如,在父级和子级(现在变成孙子级)之间添加了另一个控制器(由您明确添加或由另一个Angular指令隐含添加),我们将需要使用$parent.$parent.testModel
。
$parent
取决于DOM结构。如果在父级和子级(现在的孙子)之间添加了另一个控制器(由您明确添加或由另一个Angular指令隐式添加),则可能需要使用$parent.$parent.testModel
。我会更新帖子以反映这一点。 - Mark Rajcokscope: {testModel: '=ngModel'},