我创建了一个带有两个属性的隔离范围的指令。其中一个设置为使用等号进行数据绑定。如果我多次手动插入指令html文档,那么对值的更改将按预期反映在控制器的作用域上。但是,如果我使用转发器(ng-repeat)插入元素,则与控制器上的示波器的连接不再起作用。知道为什么吗?
该指令如下所示:
myApp.directive("phone", function(){
return{
restrict: "E",
scope:{
number:"@",
dirname:"="
},
template: '<div class="panel"> <input type="text" ng-model="dirname"><br>Number:{{number}} {{dirname}}</div> '
}
});
答案 0 :(得分:3)
我猜(因为你没有提供任何HTML或模型数据)你有一个dirnames数组,所以在ng-repeat中,你试图将ng-model绑定到一个原语。由于ng-repeat的每次迭代都会创建自己的子范围,因此当您首次键入文本框时,将在子范围上创建dirname
原始属性。 (这就是JavaScript prototypal inheritance的工作方式。)
修复方法是使用对象而不是基元。
$scope.names = [ {name: 'Superhero'}, {name: 'Julio'} ];
<li ng-repeat="nameObj in names">
<phone number="123" dirname="nameObj.name"></phone>
</li>