Загрузка вложенных данных JSON в Angular JS на основе выбранных значений в каскадных выпадающих списках в ng-модальное всплывающее окно

0

Я пытаюсь создать кусок кода, используя Angular JS для файла JSON, имеющего три уровня вложенной структуры. Первый уровень - это тип автомобиля, второй - производитель и третий поставщик услуг. Файл JSON выглядит следующим образом, учитывая имя файла "types.json".

JSON Файл:

<!-------------------JSON file :"types.json"------------------------>
[
{"name":"Taxi","value":"taxi", <!--Level-1-->
    "manuf":[
        {"name":"Tata Indica", <!--Level-2-->
            "servprov":[
                {"name":"Service Provider Name 1", <!--Level-3-->
                 "arrival":"12Mins",
                 "fare":"$25",
                 "minfare":"$10",
                 "riders":"8 persons"   
                },

                {"name":"Service Provider Name 2", <!--Level-3-->
                 "arrival":"8Mins",
                 "fare":"$23",
                 "minfare":"$8",
                 "riders":"12 persons"

                }]          
        },

        {"name":"Mahindra Logan", <--Level-2-->
            "servprov":[
                {"name":"Service Provider Name 3", <!--Level-3-->
                 "arrival":"5Mins",
                 "fare":"$45",
                 "minfare":"$20",
                 "riders":"14 persons"  
                },

                {"name":"Service Provider Name 4", <!--Level-3-->
                 "arrival":"2Mins",
                 "fare":"$50",
                 "minfare":"$25",
                 "riders":"10 persons"

                }]
        }, 

        {"name":"Totota Etios",  <!--Level-2-->
            "servprov":[
                {"name":"Service Provider Name 5",  <!--Level-3-->
                 "arrival":"12Mins",
                 "fare":"$25",
                 "minfare":"$10",
                 "riders":"8 persons"   
                },

                {"name":"Service Provider Name 6",  <!--Level-3-->
                 "arrival":"8Mins",
                 "fare":"$23",
                 "minfare":"$8",
                 "riders":"12 persons"

                }]  
            }]
    },

        {"name":"SUV","value":"suv",  <!--Level-1-->
        "manuf": [
        {"name":"Hyundai Creta" , <!--Level-2-->
            "servprov":[
                {"name":"Service Provider Name 1", <!--Level-3-->
                 "arrival":"12Mins",
                 "fare":"$25",
                 "minfare":"$10",
                 "riders":"8 persons"   
                }, 
        {"name":"Renault Duster" , <!--Level-2-->
            "servprov":[
                {"name":"Service Provider Name 2", <!--Level-3-->
                 "arrival":"12Mins",
                 "fare":"$25",
                 "minfare":"$10",
                 "riders":"8 persons"   
                }, 
      {"name":"Mahindra XUV"}  <!--Level-2-->
      ]},
<!--service provider details are not provided for this-->

]
<!-------------------JSON file ------------------------>

Переходя к структуре HTML, первые два уровня помещаются в раскрывающийся список, который появляется на основе сделанного выбора. это было сделано с помощью ng-options, ng-model и ng-repeat. Проблема в том, как я могу получить информацию о данных уровня 3 (поставщик услуг) в модальном всплывающем меню на основе выбора, сделанного на уровне 2 (Производители), и при нажатии кнопки "Поставщик услуг". Тело показано ниже.

Структура HTML:

<!----------------------Body--------------------------->
<section class="col-lg-4" ng-controller="CarTypes">
    <div class="bgimage2">
        <div class="form-inline">
            <select name="type" class="form-control dropdown-toggle basic" ng-options="item as item.name for item in carTypes track by item.name"
                ng-model="manufTypes">
                <option value=''>Select Type</option>
                <option ng-repeat="data in carTypes" value="{{data.value}}">{{data.name}}</option>
            </select>
        </div>

        <div class="form-inline">
            <select class="form-control basic">   
                <option value=''>Select Manufacturer</option>                            
                <option ng-repeat="subCars in manufTypes.manuf">{{subCars.name}}</option>
            </select>
        </div>
        <button type="button" ng-click="submit()" class="button1 btn btn-warning">SERVICE PROVIDER</button>
    </div>
</section>
<!----------------------Body--------------------------->

Это контроллер, который используется с carTypes для автомобилей (уровень 1) и manufTypes для производителей (уровень 2). Какую переменную области действия я должен использовать для поставщика услуг. Пожалуйста, помогите.

контроллер:

<!-------------------Controller------------------------>
.controller('CarTypes', function ($scope, $http) {
    $http.get('types.json').success(function (response) {
        $scope.carTypes = response;
        $scope.manufTypes = $scope.carTypes;

    })
})
<!-------------------Controller------------------------>

1 ответ

0

Вам нужно использовать ng-options или data-ng-options в выпадающих data-ng-options. Я внес некоторые изменения в HTML.

Проверьте это демо.

(function() {
  var app = angular.module("app", []);
  app.controller("controller", ["$scope",
    function($scope) {
      $scope.manufTypes = "";
      $scope.submit = function() {

        $("#myModal").modal();

      };
      $scope.carTypes = [{
        "name": "Taxi",
        "value": "taxi",
        "manuf": [{
          "name": "Tata Indica",
          "servprov": [{
            "name": "Service Provider Name 1",
            "arrival": "12Mins",
            "fare": "$25",
            "minfare": "$10",
            "riders": "8 persons"
          }, {
            "name": "Service Provider Name 2",
            "arrival": "8Mins",
            "fare": "$23",
            "minfare": "$8",
            "riders": "12 persons"
          }]
        }, {
          "name": "Mahindra Logan",
          "servprov": [{
            "name": "Service Provider Name 3",
            "arrival": "5Mins",
            "fare": "$45",
            "minfare": "$20",
            "riders": "14 persons"
          }, {
            "name": "Service Provider Name 4",
            "arrival": "2Mins",
            "fare": "$50",
            "minfare": "$25",
            "riders": "10 persons"
          }]
        }, {
          "name": "Totota Etios",
          "servprov": [{
            "name": "Service Provider Name 5",
            "arrival": "12Mins",
            "fare": "$25",
            "minfare": "$10",
            "riders": "8 persons"
          }, {
            "name": "Service Provider Name 6",
            "arrival": "8Mins",
            "fare": "$23",
            "minfare": "$8",
            "riders": "12 persons"
          }]
        }]
      }, {
        "name": "SUV",
        "value": "suv",
        "manuf": [{
          "name": "HyundaiCreta",
          "servprov": [{
            "name": "ServiceProviderName1",
            "arrival": "12Mins",
            "fare": "$25",
            "minfare": "$10",
            "riders": "8persons"
          }, {
            "name": "RenaultDuster",
            "servprov": [{
              "name": "ServiceProviderName2",
              "arrival": "12Mins",
              "fare": "$25",
              "minfare": "$10",
              "riders": "8persons"
            }, {
              "name": "MahindraXUV"
            }]
          }]
        }]
      }];
      $scope.manufTypes = $scope.carTypes;
    }
  ]);
})();
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div data-ng-app="app">
  <div data-ng-controller="controller">
    <div class="bgimage2">
      <div class="form-inline">
        <select name="type" class="form-control dropdown-toggle basic" data-ng-options="item as item.name for item in carTypes" ng-model="manufTypes">
        </select>
      </div>

      <div class="form-inline">
        <select class="form-control basic" data-ng-model="subCar" data-ng-options="subCars as subCars.name for subCars in manufTypes.manuf">
          <option value="">Select Manufacturer</option>
        </select>
      </div>
      <button type="button" data-ng-click="submit()" class="button1 btn btn-warning">SERVICE PROVIDER</button>
    </div>
    <!-- Modal -->
    <div id="myModal" class="modal fade" role="dialog">
      <div class="modal-dialog">

        <!-- Modal content-->
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal">&times;</button>
            <h4 class="modal-title">Service Provider Data</h4>
          </div>
          <div class="modal-body">
            <p>Data:</p>
            <table border="1 " class="table-bordered">
              <thead>
                <tr>
                  <th>Name</th>
                  <th>Arrival</th>
                  <th>Fare</th>
                  <th>Min fare</th>
                  <th>Riders</th>
                </tr>
              </thead>
              <tbody>
                <tr data-ng-repeat="items in subCar.servprov">
                  <td data-ng-bind="items.name"></td>
                  <td data-ng-bind="items.arrival"></td>
                  <td data-ng-bind="items.fare"></td>
                  <td data-ng-bind="items.minfare"></td>
                  <td data-ng-bind="items.riders"></td>
                </tr>
              </tbody>
            </table>
          </div>
          <div class="modal-footer">
            <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню