angularjs关注团队内部的变化
我有这些数组对象angularjs关注团队内部的变化,angularjs,Angularjs,我有这些数组对象 $scope.filters = { 1 : { name : 'Pattern', options : { 1 : { name: 'Plain', selected: false }, 2 : { name: 'Self Design', selected: false }, 3 : { name: 'Check
$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 }
}
}
}
如何使用$watch获取selected=true筛选器的组列表
如果可能,我希望结果结构如下:
{
Pattern : {
1 : Plain,
2 : Self Design
},
Colour : {
1: Blue
}
}
试试这个:
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"
}
}
*/
看看这个。不是精确的解决方案,但会给你一个开始
我已经使用$watch(带有objectEquality参数)来获取更改过的对象。然后,您可以使用下划线.js或纯javascript过滤掉所选项目