父数组中每个值的angular指令保持同步

时间:2016-03-16 13:31:04

标签: javascript angularjs angularjs-directive

我有一个包含数组的父对象,对于每个值,我呈现一个通过隔离范围传递值的指令。对于这个简单的演示,我只需将对象添加到控制器:

  $scope.schedule = {
    __type: "Fixed",
    ids: [101, 102, 103]
  }
})

指令:

    app.directive('picker', function() {

  return {
      scope:{
        import: '='
      },
      template:'<input ng-model="import" >'
  }
});

html:

  <div ng-repeat="i in schedule.ids">
    <picker import="i"></picker>  Bind: {{i}}
  </div>

我的真实世界问题是我有一个需要重复使用的datepicker指令,因此对于每个呈现的日期选择器,我希望底层/原始数组在值发生变化时保持同步。我错了吗?

正如你在小提琴中看到的那样,我的渲染指令与它们的隔离范围值保持同步,但是它们形成的底层数组没有,在下面插入:

https://plnkr.co/edit/Nt9QwiBmlaW3PKPo8XRN?p=info

由于

2 个答案:

答案 0 :(得分:2)

由于数组元素是基元,因此需要引用实际数组

<div ng-repeat="i in schedule.ids track by $index">
    <picker import="schedule.ids[$index]"></picker>  Bind: {{i}}
</div>

DEMO

答案 1 :(得分:1)

使用引用而不是值,因为angular将尝试浅层复制该对象

<div ng-repeat="(index, value) in schedule.ids track by $index">
    <picker import="schedule.ids[index]"></picker>  Bind: {{value}}
</div>

import="i" schedule.ids 的浅层副本,import="schedule.ids[index]" schedule.ids 的参考,

工作演示https://plnkr.co/edit/QX4Siu4xsJ6poQyy7Ljb?p=preview