【问题标题】:Nested List in Angular JS - Cant figure out how to doAngular JS中的嵌套列表-无法弄清楚该怎么做
【发布时间】:2016-09-18 05:53:43
【问题描述】:

我对 Angular JS 非常陌生。

我正在创建一个简单的网络应用程序来学习 Angular JS。

我有一个包含各种植物类别的主列表。例如,水果、蔬菜等。要从 MySQL 数据库中获取这些数据,我使用的是 PHP 脚本。

当使用点击一个类别时,我需要展开一个列表,其中包含该类别中植物的名称。例如,如果用户点击“水果”,它会展开一个包含“芒果”、“苹果”、“香蕉”等的列表。这也是由 PHP 脚本完成的。对于脚本,我需要将类别 ID 作为 URL 参数传递

EG。 select_category.php?cat_id=1

最后的名单应该像follow一样

  • 水果

    • 芒果
    • 香蕉
    • 苹果
  • 蔬菜
  • 草药

以下显示了我正在使用的 HTML/JS 页面。

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>   
<title>Test Display</title>
<body>
    <div ng-app="cat_display" ng-controller="customersCtrl">
        <div ng-repeat="x in plant_cat">
        <button value={{x.cat_id}} type="button" class="btn btn-primary btn-lg btn-block" ng-click="get_plants(x.cat_id)">{{x.cat_name}}</button> </br>
            <ul class="list-group">
                <li class="list-group-item" ng-repeat="y in plant_cat.plant">{{y.plant_name}}</li>
            </ul>
        </div>
    </div>    
</body>


<script>
    var app= angular.module('cat_display',[]);
    var get_all_plant_cats = function($scope,$http)
    {
        //get plat categories
        $http.get("http://localhost:8080/Aggry/select_plant_categories.php")
            .then(function(response){
            $scope.plant_cat = response.data.records;
        });
        //get plants
        $scope.get_plants = function(cat_id)
        {
          $http.get("http://localhost:8080/Aggry/select_plant.php?cat_id="+cat_id)
            .then(function(response){
                $scope.plant_cat.plant = response.data.records;                  
            });
        }
    };

    app.controller('customersCtrl',get_all_plant_cats);
</script>

但这并没有按预期工作。

当我单击一个类别时,它会展开所有列表。

我已经尝试了堆栈溢出中的所有示例。我没有运气,因为我的情况完全不同。在我的情况下,我需要向 PHP 脚本发送一个参数来选择必要的数据。

请帮我解决这个问题。

这是由 select_plant_cat.PHP 生成的 JSON(选择 * 植物类别)

{"records":[{"cat_id":"1","cat_name":"විසිතුරු මල්"},{"cat_id":"2","cat_name":"ඖෂධිය පැල"},{"cat_id":"3","cat_name":"පලතුරු පැල"},{"cat_id":"4","cat_name":"එළවලු පැල"}]}

这是由 select_plant.PHP?cat_id=1 (Select *plants where cat_id=1) 生成的 JSON

{"records":[{"plant_id":"1","plant_min_price":"300.00","plant_max_price":"","plant_short_description":"පඳුරු ගැටපිච්ච මල් සහිතව බන්දුන්ගතාකළ පැල","plant_description":"සුදු පැහැති මල් සහිත මධ්‍යම ප්‍රමාණයේ ගැට පිච්ච පැල කොම්පෝස්ට් පොහොර යොදා බඳුන් ගතකර ඇත.බිම සිටුවීමට හෝ බන්දුනේම තබා ගැනීමට උචිතය","plant_image_url":"https://s-media-cache-ak0.pinimg.com/736x/2e/38/ce/2e38ce89db5e470c8e6e527738fd18a5.jpg","plant_availability":"true","plant_name":"ගැට පිච්ච"},{"plant_id":"2","plant_min_price":"500.00","plant_max_price":"750.00","plant_short_description":"බඳුන් ගත කරන ලද රතු,කහ සහ සුදු අරලිය පැල","plant_description":"කොම්පෝස්ට් යොදා බඳුන් ගත කර ඇත. බන්දුනෙම තබා ගැනීමට වඩාත් සුදුසුය.","plant_image_url":"https://c1.staticflickr.com/5/4068/4258135709_d18a001c5b_o.jpg","plant_availability":"false","plant_name":"බේබි අරලිය"}]}

谢谢。

【问题讨论】:

  • 是将所有植物添加到它们的类别中还是将一种植物类型添加到所有类别中?
  • 当您选择一个类别时,它会列出该类别下所有可用的植物
  • 是的,但是您说:“当我单击一个类别时,它会展开所有列表。”这可能有多种原因
  • 你把我弄糊涂了,伙计:)
  • 现在你知道我的感受了吧。 :D

标签: javascript angularjs ng-repeat


【解决方案1】:

你想在重复数组中的一个数组中重复,所以代码必须是:

<body>
    <div ng-app="cat_display" ng-controller="customersCtrl">
        <div ng-repeat="x in plant_cat">
        <button value={{x.cat_id}} type="button" class="btn btn-primary btn-lg btn-block" ng-click="get_plants(x.cat_id)">{{x.cat_name}}</button> </br>
            <ul class="list-group">
                <li class="list-group-item" ng-repeat="y in x.plant">{{y.plant_name}}</li>
            </ul>
        </div>
    </div>    
</body>

注意第二次重复是y in x.plant

【讨论】:

  • 我已经改变了它..还有JS脚本如下 $scope.get_plants = function(cat_id) { alert(cat_id); $http.get("localhost:8080/Aggry/select_plant.php?cat_id="+cat_id) .then(function(response){ alert(response.data.records); $scope.x.plant = response.data.records; }); } 但它不起作用:(
  • 当我检查控制台时显示“angular.js:12520TypeError: Cannot set property 'plant' of undefined”
  • 因为$scope.x 不存在
  • 那么我该如何定义呢:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-08
  • 2013-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-15
相关资源
最近更新 更多