2013-05-25 153 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