Как я могу предотвратить массив объектов с неопределенными значениями? - PullRequest
0 голосов
/ 13 марта 2020

Вот мой код Plnkr: plnkr.co/edit/F51TYecauH3L94jm?preview

HTML Код Plnkr:

    <body ng-app="myApp">
    <div ng-controller="MyController">

        <div ng-dropdown-multiselect="" options="dropdownOptions" selected-model="dropdownSelected" events="exampleEvents"></div>

    </div>
  </body>

JavaScript Код Plnkr:

var myApp = angular.module('myApp',['angularjs-dropdown-multiselect']);

myApp.controller("MyController", ['$scope',function($scope){

  $scope.initial = "Layer 1,Layer 2,Layer 3,Layer 4";
  $scope.initialArray = $scope.initial.split(',');

    $scope.dropdownSelected = [];
    for(n = 0; n < $scope.initialArray.length; n++)
    {
        $scope.dropdownSelected[n] = {
          id: n,
          label: $scope.initialArray[n]
        }
        console.log("dropdownSelected #", n, $scope.dropdownSelected[n]);
    }

    $scope.dropdownOptions = [];
    for(m = 0; m < $scope.initialArray.length; m++)
    {
      $scope.dropdownOptions.push($scope.dropdownSelected[m]);
    }
    for(i = 0; i < $scope.dropdownSelected.length; i++)
    {
        console.log("dropdownOptions #", i, $scope.dropdownOptions[i]);
    }

  console.log($scope.initial);

  $scope.exampleEvents = {
    onSelectionChanged: function() {
      $scope.initial = [];
      console.log($scope.initial);
        $scope.dropdownSelected.forEach(function (selectedData) {
            $scope.initial.push(
              {
                "id": selectedData.id,
                "label": selectedData.label
              }
            );
        });
      console.log($scope.initial);
    }
  }
}]);

Я успешно добавил в объекты (с его свойствами, состоящими из числа и строки) в массив. Индексы массива - это опции раскрывающегося меню (взяты из плагина AngularJS MultiSelect Dropdown).

Я хочу создать событие, которое сбрасывает значения исходного массива ($ scope.exampleEvents и onSelectionChanged). и заменяет их объектами, основанными на опциях меню SELECTED (selectedData в forEach l oop).

Чтобы проверить, работает ли мой код, я использовал console.log. Первоначально объекты массива правильные: исходные объекты, хранящиеся в массиве

Когда я начинаю выбирать параметры (т. Е. Объекты из массива) из выпадающее меню, изначально объекты отображаются правильно: идеальный вывод

Когда я выбираю больше опций меню, свойство строки (никогда не целое) заканчивается вверх становится неопределенным: неправильный вывод

1 Ответ

0 голосов
/ 13 марта 2020

Это можно заархивировать, используя extra-settings значение { externalIdProp: ''}.

Это записано в официальных документах, кстати, в разделе "Полный объект как модель": http://myforce.github.io/angularjs-dropdown-multiselect/

HTML:

<div ng-dropdown-multiselect="" options="example7data" selected-model="example7model" extra-settings="example7settings"></div>

Javascript внутри angularjs контроллер:

$scope.example7model = [];
$scope.example7data = [ {id: 1, label: "David"}, {id: 2, label: "Jhon"}, {id: 3, label: "Danny"}];
$scope.example7settings = {externalIdProp: ''};

Вот plnkr с рабочим раствором: http://plnkr.co/edit/JwGjoLvN7q96rGsN?preview

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...