2

我有一个嵌套的项目列表,例如Day > Exercises > Sets.
每个day可以有很多exercises,每个exercise可以有很多sets
每个列表都有一个add按钮。

一切都很好,直到您使用 angular-ui-tree 重新排序它们。

如果您将第一个练习与第二个练习交换,然后单击+ set按钮,则新的设置位置不是正确的。

这是代码笔
尝试交换同一天的 2 个练习,然后单击+ set属于第 8 个练习的那个。

我知道问题是由ng-init指令中设置的变量引起的,但我找不到任何解决方案。

谢谢你。

<ul ng-model="program.days" ui-tree-nodes>
  <li ng-repeat="day in program.days" ng-init="dayIndex = $index" ui-tree-node>
    <div class="day">{{ day.name }}</div>

    <!-- Exercises -->
    <ul ng-model="day.exercises" ui-tree-nodes>
      <li ng-repeat="ex in day.exercises" ng-init="exIndex = $index" ui-tree-node>
        <div>{{ ex.name }}</div>

        <!-- Sets -->
        <ul ng-model="ex.sets" ui-tree-nodes>
          <li ng-repeat="set in ex.sets" ui-tree-node>
            <div>{{ set.reps }} reps</div>
          </li>
          <li><button ng-click="addSet(dayIndex, exIndex)">+ set</button></li>
        </ul>
        <!-- end Sets -->

      </li>
      <li><button ng-click="addExercise(dayIndex)">+ exercise</button></li>
    </ul>
    <!-- end Exercises -->

  </li>
  <li><button ng-click="addDay()">+ day</button></li>
</ul>
<!-- end Days -->
4

1 回答 1

2

Ng-init 对你正在做的事情不好。使用嵌套数组时,尝试传递对象,而不是索引,将保持代码干净。

这是一个例子:

<ul>
    <li ng-repeat="day in program.days">
        <div class="day">{{ day.name }}</div>
        <ul>
            <li ng-repeat="ex in day.exercises">
                <div class="ex">{{ ex.name }}</div>
            </li>
        </ul>
    </li>
    <li><button ng-click="addExercice(day)">+ set</button></li>
</ul>

这样,您将“day”对象传递给您的函数,因此该对象的任何更改都将反映您的 html:

$scope.addExercice = function(day) {
    day.exercices.push({});
};
于 2015-09-24T15:10:34.770 回答