angular_s指令与ng-repeat不尊重=范围绑定

时间:2013-04-12 13:50:26

标签: angularjs angularjs-directive

我创建了一个带有两个属性的隔离范围的指令。其中一个设置为使用等号进行数据绑定。如果我多次手动插入指令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> '

}

});

1 个答案:

答案 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>

Fiddle