1

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

}

});
4

1 回答 1

3

我猜(因为你没有提供任何 HTML 或模型数据)你有一个目录名数组,所以在 ng-repeat 中,你试图将 ng-model 绑定到一个原语。由于 ng-repeat 的每次迭代都会创建自己的子范围,因此当您第一次输入文本框时,dirname将在子范围上创建一个原始属性。(这就是JavaScript 原型继承的工作原理。)

解决方法是使用对象而不是原语。

$scope.names = [ {name: 'Superhero'}, {name: 'Julio'} ];

<li ng-repeat="nameObj in names">
   <phone number="123" dirname="nameObj.name"></phone>
</li>

小提琴

于 2013-04-12T15:18:02.390 回答