2014-01-23 25 views
1

当勾选每个复选框时,我可以获取所有选中的值。获取角度手表中的复选框组值

我想把这些值放到它们各自的组中。

这里是我的预期成果:采用了棱角分明$表,以获得选择的值

IM。

$scope.$watch('filters|filter:{selected:true}', function (nv, ov, scope) { 
    $scope.filter_selected = []; 

angular.forEach(nv, function (value) { 
    angular.forEach(value.options, function (v, k) { 
     if (v.selected == true) { 
      this.push(v.name); 
     } 
    }, $scope.filter_selected); 
}); 
}, true); 

here is the full code in fiddle

UPDATE:

我设法让这些代码我预期的结果:

$scope.$watch('filters|filter:{selected:true}', function (nv, ov, scope) { 
    $scope.filter_selected = {pattern: [], colour: []}; 
    angular.forEach(nv, function (value) { 
    if (value.name == 'pattern') { 
     angular.forEach(value.options, function (v, k) { 
      console.log(this); 
      if (v.selected == true) { 

       this.push(v.name); 
      } 
     }, $scope.filter_selected.pattern); 
    } 

    if (value.name == 'colour') { 
     angular.forEach(value.options, function (v, k) { 
      //console.log(this); 
      if (v.selected == true) { 

       this.push(v.name); 
      } 
     }, $scope.filter_selected.colour); 
    }    
}); 

updated fiddle

现在,如何让我核对部动态如果我有更多的团体?

+0

你能否阐述这个问题,这很难理解。也许解释使用小提琴来解决问题的步骤。 –

+0

您好MWay,我用我最新的代码更新了这个问题 – od3n

回答

1

我已更新您的代码,以简化上面的内容,并希望实现您想要的结果。我真的不认为你需要手表(除非你的更新要求更复杂),但你应该能够建立在这一点上。

http://jsfiddle.net/j35zt/

控制器代码被简化为如下:

app.controller('FilterCtrl', function ($scope, $http) { 

    $scope.filters = [ 
     { name: 'pattern', placeholder: 'pattern', 
      options: [ 
       { name: 'Plain', selected: false },  
       { name: 'Self Design', selected: false },  
       { name: 'Check', selected: false },  
       { name: 'Stripe', selected: false },  
       { name: 'Print', selected: false } 
      ]}, 
     { name: 'colour', placeholder: 'colour', 
      options: [ 
       { name: 'White', selected: false }, 
       { name: 'Blue', selected: false }, 
       { name: 'Grey', selected: false } 
      ]} 
    ]; 

    $scope.updateOutput = function() {   
     $scope.filter_selected = {}; 
     angular.forEach($scope.filters, function(f) { 
      $scope.filter_selected[f.name] = []; 
      angular.forEach(f.options, function(o){ 
       if(o.selected){ 
        $scope.filter_selected[f.name].push(o.name); 
       } 
      }); 
     }); 
    } 
}); 

只要注意,该视图也需要改变到所述控制器匹配。基本上ng-change是更新的唯一原因。