как показать выпадающий список после выбора любого из флажков, созданных в цикле JS

0

Я новичок в программировании углового js, поэтому, пожалуйста, извините меня, если мой вопрос наивен. Я заполняю список флажков в зависимости от значений внутри объекта json. Я использую ng-repeat для итерации по списку полученных ключей и значений и отображения флажка. При каждом щелчке по флажку я делаю вызов сервера для получения релевантных данных. Данные, которые я получаю, должны быть заполнены в раскрывающемся списке только тогда, когда нажимаются, а раскрывающийся список должен исчезать при щелчке. Я хочу захватить выбранный вариант выпадающего списка после того, как пользователь его выберет. Я застрял в том, как это получить.

Мой код для справки:

HTML:

 <div class="container" ng-controller="OptionsController" >
       <div ng-repeat="(key, value) in options" ng-if="value === 'text'">
    <!--         {{key}} : {{value}}-->
            <input type="checkbox" ng-click="getDistinct(key)"/>
                <label>{{key}}
            </label>
        <div class="animate-show">
        <select  id="selector" ng-model="QueryFormData.Graph.selected">
            <option ng-repeat="name in QueryFormData.Graph.options" 
                    ng-value="name">{{name}}</option> 
        </select>
        </div>
        </div>
 </div>

Код контроллера:

myApp.controller('OptionsController', ['$scope', '$http', '$location', 'datashare',
  function($scope, $http, $location, datashare) {
    //$scope.options = datashare.jsonData;
    $scope.options = {
      "_id": "571a0fcfaa6d92581ec99b2e",
      "Name": "text",
      "isstring": "text",
      "value1": "number",
      "value": "number",
      "status": "text",
      "ItantaTime": "time"
    };
    $scope.keyArr = [];
    $scope.QueryFormData = {
      Graph: {
        options: [
          'Line Graph'
        ],
        selected: 'Line Graph'
      },
      displayValue: ''
    };
    $scope.getDistinct = function(key) {
      if ($scope.keyArr.indexOf(key) == -1) {
        $scope.keyArr.push(key);
        var ServerAddr = "http://localhost:2000/getDistinct/" + key;
        console.log("Server Addr :" + ServerAddr);
        $http.get(ServerAddr, {
            headers: {
              'Content-Type': 'application/json'
            }
          })
          .success(function(result) {
            console.log(result);
          })
          .error(function(data, status) {
            console.log(data)
          });
      }
      console.log("changed : " + key);
    };
  }
]);

С текущим кодом я вижу сразу все выпадающие списки. Я хочу показать выпадающие списки в качестве функции переключения при выборе флажка.

Любая помощь высоко ценится.

Теги:
drop-down-menu
angular-ui-bootstrap
checkboxlist

1 ответ

0

Во-первых, вам не нужно ng-if. Используйте встроенный фильтр:

<div ng-repeat="(key, value) in options" ng-if="value === 'text'">

Возможно

<div ng-repeat="(key, value) in options | filter: { value: 'text' }">

Для вашей проблемы фильтрации вы можете снова использовать filter в элементах select чтобы получать только нужные значения выпадающего списка. Ваш ответ JSON должен обладать фильтруемым свойством, хотя... Итак, разместите свой JSON.

Вы используете его следующим образом:

<select ng-options="item.key as item.name for item in collection| filter:{ someProperty: true }">
  • 0
    Большое спасибо за ответ. Я использовал опцию фильтра вместо нг-если. Объект JSON, который я получаю как часть вызова GetDistinct с сервера, имеет формат {"value": ['2', '3', '4', '5', '6', '7', '8' ]}. Я хочу показать выпадающий список, состоящий из значений, полученных выше. Я все еще не понимаю, как это может привести к тому, что я покажу выпадающий список в режиме переключения. Моя проблема в том, что я не могу показать выпадающий список, соответствующий установленному флажку.
  • 0
    Ссылка ngRepeat говорит о том, что встроенные фильтры orderBy и filter не работают с объектами и будут выбрасываться при использовании с ними.

Ещё вопросы

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