范围混乱嵌套ng重复

时间:2013-05-25 10:28:25

标签: angularjs scope

我花了好几个小时试图理解为什么我被这个问题所迷惑。

小提琴:http://jsfiddle.net/hanspc/ZJyTW/

小提琴只是我问题的简化示例。 我们的想法是在产品上设置一些属性,并根据其他字段过滤字段值。 (例如,如果type = car :-),则不显示'Plane wing'选项)

<div class="productField" ng-repeat="field in product.fields | orderBy:order">{{field.name}} (hidden: {{field.disabledValue}}):
   <div class="productFieldContent" ng-hide="field.disabledValue">
        <select ng-model="product.values[field.name]" ng-options="design.text for design in field.values | filterValues:field:product.fields:product">
        </select>
        <button ng-click="$parent.field.disabledValue = !$parent.field.disabledValue">Toggle hide/show</button>
    </div>
</div>

在小提琴中隐藏第三个字段,直到field1 = value 1和field2 = Value 2:

if (arrayToReturn.length == 0) {
    fieldData.disabledValue = true;
} else {
    fieldData.disabledValue = false;
}

如您所见,当其他字段设置正确时,将显示产品1的字段3。 但是字段名称旁边的{{field.disableValue}}绑定未显示正确的值。

这里最怪异的部分:正确的值(false)显示在产品2的field3旁边,即使产品2中的field3保持隐藏状态。

我很确定我在范围继承中迷失了,我很确定这是因为两个ngRepeats,但有人可以告诉我发生了什么吗? : - )

由于

1 个答案:

答案 0 :(得分:2)

您引用了相同的字段 - javascript中的对象通过引用传递。

每次将它分配给某个东西时,你必须“克隆”$scope.fields,否则它会破坏:-)。 (即http://jsfiddle.net/ZJyTW/3/