2013-05-25 146 views
0

我花了数小时试图了解为什么我被这个问题所愚弄。作用域嵌套ngRepeat

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

的小提琴是我的问题只是一个简单的例子。 这个想法是在产品上设置一些属性,并根据其他字段过滤字段值。 (例如不显示“平面翼”的选择,如果类型=汽车:-)。)

<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 =值1和场2 =值2:

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

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

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

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

感谢

+0

溶液(感谢@ user1737909)是改变行: '$ scope.products [I]点域= $ scope.fields;' 到: '$范围。产品[i] .fields = angular.copy($ scope.fields);' 新工作小提琴:http://jsfiddle.net/hanspc/ZJyTW/4/ – hansch

回答

2

你引用相同的领域 - 在JavaScript中通过引用传递的对象。

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

+0

谢谢!我简直不敢相信那是简单的:-)你刚刚救了我的一天! – hansch