1

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

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

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

<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}}字段名称旁边的绑定没有显示正确的值。

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

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

谢谢

4

1 回答 1

2

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

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

于 2013-05-25T11:38:10.980 回答