【问题标题】:JSON data is not printing in li using jQuery in AngularJS在 AngularJS 中使用 jQuery 在 li 中未打印 JSON 数据
【发布时间】:2018-06-01 10:08:53
【问题描述】:

我想从我的 JSON 中获取类别。请帮助我,因为我无法在li 中打印此内容。请让我知道我犯了什么错误。

<ul ng-repeat="categories in category">
  <li>{{data.category}}</li>
</ul>
var app = angular.module('myapp', []);

app.controller('myCtrl', function($scope) {
  $.getJSON("category.json", function(data, i) {
    console.log(data[0].Category);
    //var text = data[0].Category;
    var array = [];
    for (var i = 0; i < data.length; i++) {
      var text2 = data[i];
      console.log(text2);
      array.push[text2];
    }
    return array
  });
});

解析后的 JSON 如下所示:

[{
  "Category": "Beauty",
  "subcategory": [{
    "name": "Baby Care",
    "items": [{
        "name": "Soap",
        "Price": "10.00"
      },
      {
        "name": "cream",
        "price": 20.00
      },
      {
        "name": "Drug Store",
        "items": [{
          "name": "Bandage",
          "price": 5.00
        }, {
          "name": "stringe",
          "price": 6.50
        }, {
          "name": " Pain Relief",
          "price": 8.00
        }, {
          "name": "First Aid Kit",
          "price": 14.99
        }, {
          "name": "Cold Relief",
          "price": 6.50
        }]
      }, {
        "name": "Health and Personal Care",
        "items": []
      }, {
        "name": "HouseHold Supplies",
        "items": [{
          "name": "Air Freshener",
          "price": 1.25
        }, {
          "name": "All Purpose Cleaner",
          "price": 2.99
        }, {
          "name": "Disinfecting Wipes",
          "price": 8.99
        }]
      }
    ]
  }

【问题讨论】:

  • 首先请注意格式化您的问题。在我编辑之前这是不可读的。其次,小心同时使用 jQuery 和 Angular。我建议只坚持一个。
  • 好的,Rory,下次我会注意的,谢谢您的反馈。
  • 尽量避免使用 jQuery,特别是当 AngularJS 提供等效功能时,这里使用 $http。此外,你不对返回的数组做任何事情,我想它应该分配给 $scope.category,但是你会遇到摘要循环的问题......请注意,一般来说,我们对数组使用复数(类别 - > 类别)和单数的迭代项(类别 -> 类别)。这将避免给未来的读者(包括您自己)造成混淆。

标签: jquery html angularjs


【解决方案1】:

您的代码几乎没有一个是正确的。首先,您没有显示正确的内容。

将您的 HTML 更改为:

<ul ng-repeat="category in categories">
  <li>{{category}}</li>
</ul>

为此,您需要填充 $scope.categories 而不是 var array。所以,其次,你需要使用正确的异步回调:$http.get()

因此,将您的 JS 代码更改为:

var app = angular.module('myapp', []);
app.controller('myCtrl', function($scope, $http) {
  $http.get("category.json").
  then(function(res){
    var data = res.data;
    var text2;
    $scope.categories = [];
    for (var i = 0; i < data.length; i++) {
      text2 = data[i].Category;
      $scope.categories.push(text2);
    }
  });
});

这是一个静态示例(没有$http 回调):

var app = angular.module('myapp', []);
app.controller('myCtrl', function($scope) {

  var data = [{
    "Category": "Beauty",
    "subcategory": [{
      "name": "Baby Care",
      "items": [{
          "name": "Soap",
          "Price": "10.00"
        },
        {
          "name": "cream",
          "price": 20
        },
        {
          "name": "Drug Store",
          "items": [{
              "name": "Bandage",
              "price": 5
            },
            {
              "name": "stringe",
              "price": 6.5
            },
            {
              "name": " Pain Relief",
              "price": 8
            },
            {
              "name": "First Aid Kit",
              "price": 14.99
            },
            {
              "name": "Cold Relief",
              "price": 6.5
            }
          ]
        },
        {
          "name": "Health and Personal Care",
          "items": []
        },
        {
          "name": "HouseHold Supplies",
          "items": [{
              "name": "Air Freshener",
              "price": 1.25
            },
            {
              "name": "All Purpose Cleaner",
              "price": 2.99
            },
            {
              "name": "Disinfecting Wipes",
              "price": 8.99
            }
          ]
        }
      ]
    }]
  }];
  var text2;
  $scope.categories = [];
  for (var i = 0; i < data.length; i++) {
    text2 = data[i].Category;
    $scope.categories.push(text2);
  }

});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script>

<div ng-app="myapp" ng-controller="myCtrl">

  <ul ng-repeat="category in categories">
    <li>{{category}}</li>
  </ul>

</div>

【讨论】:

    【解决方案2】:

    第一个问题是你需要引用ng-repeat中使用的名称,例如:

    <ul ng-repeat="cat in categories">
        <li>{{cat.category}}</li>
    </ul>
    

    其次,建议不要将 JQuery 和 AngularJS 混合在一起,因为 JQuery 不会触发 AngularJS 的 $digest 循环,这会导致意外的难以调试的行为。

    为了获取 JSON,请使用 $http service

    var app = angular.module('myapp', []);
    
    app.controller('myCtrl', function($scope, $http) {
        $scope.categories = [];
    
        $http.get("category.json")
            .then(function (res) {
                $scope.categories = res.data;
            });
    });
    

    希望这会有所帮助:)

    【讨论】:

    • 非常感谢,因为我是 Angular 的新手,对 jquery 知之甚少,所以我不知道如何使用。谢谢你的帮助,但我会再问你这样的问题。请不要,t介意并继续帮助我:)
    • 我试过你的代码,但有问题:因为我有类别的数量,它没有打印第一个类别假设 [0,1,2,3,4] 它正在打印 1,2, 3,4 但不是 0。
    • 您的 JSON 是否 100% 有效?请通过验证器运行它,例如jsonlint.com。我不明白为什么会错过第一个元素。
    • 是的,我验证了 JSON。它是有效的。如果你能给我电子邮件 ID,我也可以给你邮寄截图。因为我不知道在堆栈上的哪里过去。这里我从调试器粘贴代码:
    • 我正在从调试器粘贴代码:
      • 食品储藏室物品
      • 易腐烂物品
    猜你喜欢
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多