【问题标题】:angularjs directive with ng-repeat not respecting = scope bindingng-repeat不尊重的angularjs指令=范围绑定
【发布时间】:2013-04-12 13:50:26
【问题描述】:

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

}

});

【问题讨论】:

    标签: angularjs angularjs-directive


    【解决方案1】:

    我猜(因为你没有提供任何 HTML 或模型数据)你有一个目录名数组,所以在 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.

    【讨论】:

    • 实际上 dirname 是一个应该在所有电话指令之间共享的属性。但是按照您的建议定义一个对象就可以了,谢谢。
    • 我也面临同样的问题,在 ng-repeat 下我的指令只被调用一次。
    猜你喜欢
    • 2021-09-28
    • 1970-01-01
    • 2014-12-26
    • 2013-03-15
    • 2015-07-01
    • 2014-08-16
    • 2015-03-17
    • 2015-11-06
    • 2014-10-23
    相关资源
    最近更新 更多