【问题标题】:Pushing a Value & Accessing Nested JSON in AngularJS在 AngularJS 中推送值和访问嵌套 JSON
【发布时间】:2015-12-06 00:41:20
【问题描述】:

我无法将值推送到 Ionic/Angular 项目中的嵌套数据。

我想在每天的时间(如果有的话)中添加一个布尔值,我的 json 看起来像这样(我通过严格的 http 调用检索 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": []
}

我的结果是这样的

我的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”值)并相信我已经正确设置了它,但是,我对它太缺乏经验,无法让它做我想做的事。

任何帮助将不胜感激。

【问题讨论】:

  • 只需创建一个日期名称数组并对照它检查键名。如果它在日期名称数组中,则添加布尔值。您可以使用 _.contains 或普通的旧 indexOf 来检查密钥
  • 你认为你可以把这个作为另一个答案,并告诉我如何实现我仍在弄清楚 lodash @vbranden

标签: javascript angularjs json ionic lodash


【解决方案1】:

$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;
});

【讨论】:

  • 这似乎并没有破坏它,但它似乎确实推动了检查的布尔值
【解决方案2】:
var dayNames = ["sunday ", "monday",... Etc];
_.forEach($scope.filteredDays, function(v, day) {
  if (_.contains(dayNames, day)) {
    v.push(checked);
  }
});

【讨论】:

    猜你喜欢
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多