2015-12-06 37 views
2

Im在将我的Ionic/Angular项目中的嵌套数据推送到值时遇到问题。我想为每一天的时间添加一个布尔值(如果它有一个),我的json看起来像这样(我通过严格的http调用检索json,所以它的树结构不能改变)。在AngularJS中推送值和访问嵌套的JSON

{ 
    "all_year": true, 
    "season_from": "01/01", 
    "season_to": "12/31", 
    "monday": [ 
    "08:30am" 
    ], 
    "tuesday": [ 
    "08:30am" 
    ], 
    "wednesday": [ 
    "08:00am", "09:30am", "01:30pm" 
    ], 
    "thursday": [ 
    "08:30am", "09:30am" 
    ], 
    "friday": [ 
    "08:30am" 
    ], 
    "saturday": [], 
    "sunday": [] 
} 

我的结果看起来是这样 enter image description here

我的HTML

<ion-list ng-repeat="(key, value) in filteredDays" 
        ng-model="value.checked" 
        ng-checked ="value.checked"> 
      <div class="item item-divider"> 
       <h3>{{key}}</h3><!--{{value}}--></div> 
      <ion-toggle ng-repeat="x in value" 
          ng-model="value" 
        ng-checked="x" 
        > 
      {{x}} 
      </ion-toggle> 

我的js

$scope.filteredDays={}; 
    $scope.unFilteredDays = { 
      "all_year": true, 
      "season_from": "01/01", 
      "season_to": "12/31", 
      "monday": [ 
      "08:30am" 
      ], 
      "tuesday": [ 
      "08:30am" 
      ], 
      "wednesday": [ 
      "08:00am", "09:30am", "01:30pm" 
      ], 
      "thursday": [ 
      "08:30am", "09:30am" 
      ], 
      "friday": [ 
      "08:30am" 
      ], 
      "saturday": [], 
      "sunday": [] 
     }; 
    $scope.filteredDays = $scope.unFilteredDays; 

//THIS IS WHERE IM STUCK 

/* 
    var checked = false; 
    $scope.filteredDays.forEach($scope.filteredDays, function(value, key) { 
    $scope.filteredDays.push(checked); 
}); 

*/

我留下了我被卡住的地方的评论,我似乎无法弄清楚如何将布尔推送到时间切换项目数组。我设置了一个codepen here

此外,我已经尝试在这个项目中处理lodash来处理数据(并从列表中获取“all_year”,“season_from”,“season_to”值),并相信我已设置但是,我对它太缺乏经验,无法按照自己的意愿去做。

任何帮助,将不胜感激。

+0

只是要一天名称的数组,并检查键名反对。如果它在日期名称数组中,则添加布尔值。你可以使用_.contains或普通的旧indexOf来检查密钥 – vbranden

+0

你认为你可以做出另一个答案,并告诉我如何完成,我仍然搞清楚lodash @vbranden – garrettmac

回答

0

$scope.filteredDays不是一个数组,因此没有forEach方法。取而代之的是:

var checked = false; 
$scope.filteredDays.forEach(function(newCheckItem) { 
    newCheckItem.checked = checked; 
}); 

试试这个:

var checked = false; 
Object.keys($scope.filteredDays).forEach(function(key) { 
    $scope.filteredDays[key].checked = checked; 
}); 
+0

这似乎并没有打破它但它似乎推动了检查的布尔值 – garrettmac

0
var dayNames = ["sunday ", "monday",... Etc]; 
_.forEach($scope.filteredDays, function(v, day) { 
    if (_.contains(dayNames, day)) { 
    v.push(checked); 
    } 
});