2015-12-06 35 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); 
    } 
});