2014-01-20 57 views
1

内变化,我有这些数组对象angularjs观看

$scope.filters = { 
     1 : { 
      name : 'Pattern', 
      options : { 
       1 : { name: 'Plain', selected: false }, 
       2 : { name: 'Self Design', selected: false }, 
       3 : { name: 'Check', selected: false }, 
       4 : { name: 'Stripe', selected: false }, 
       5 : { name: 'Print', selected: false }, 
       6 : { name: 'Others', selected: false } 
      } 
     }, 
     2 : { 
      name : 'Colour', 
      options : { 
       1 : { name: 'White', selected: false }, 
       2 : { name: 'Blue', selected: false }, 
       3 : { name: 'Grey', selected: false }, 
       4 : { name: 'Pink', selected: false }, 
       5 : { name: 'Purple', selected: false }, 
       6 : { name: 'Black', selected: false }, 
       //7 : { name: 'Others', selected: false }     
      } 
     }, 
     3 : { 
      name : 'Material', 
      options : { 
       1 : { name: 'Cotton', selected: false }, 
       2 : { name: 'Technicals', selected: false }, 
       3 : { name: 'CVC', selected: false }, 
       4 : { name: 'Cotton, Two Ply', selected: false }     
      } 
     } 
    } 

怎样用$看选择=真正的过滤器组列表?

如果可能的话,我想结果stucture是这样的:

{ 
Pattern : { 
    1 : Plain, 
    2 : Self Design 
}, 
Colour : { 
    1: Blue 
} 
} 

回答

1

试试这个:

var name ,options, selected = {}; 

for (var idx in $scope.filters) { 
    name = $scope.filters[idx]['name']; 
    options = $scope.filters[idx]['options']; 
    for (var i in options) { 
    if(options[i]['selected']) { 
     selected[name] = selected[name] || {}; 
     selected[name][i] = options[i]['name']; 
    } 
    } 
} 

console.log(JSON.stringify(selected,null,4)); 

/* 

{ 
    "Pattern": { 
     "1": "Plain", 
     "2": "Self Design" 
    }, 
    "Colour": { 
     "2": "Blue" 
    } 
} 

*/ 
0

看这个plunkr。不是确切的解决方案,但会给你一个开始。

我已经使用$ watch(使用objectEquality参数)来获取更改的对象。然后,您可以使用underscore.js或纯javascript来过滤所选项目。