выпадающий список при нажатии - PullRequest
0 голосов
/ 19 июня 2019

Я не могу закрыть раскрывающийся список множественного выбора при нажатии на раскрывающийся список снаружи, используя приведенный ниже код.

Пробовал двумя способами, как прокомментировано в коде, но все еще не смог закрыть его при нажатии на раскрывающийся список снаружи.

Код:

 var MultiDirectivesApp = angular.module('Multi_DirectiveApp', []);

    MultiDirectivesApp.directive('dropdownMultiselect', ['$document', function ($document) {
        return {
            restrict: 'E',
            scope: {
                model: '=',
                options: '=',
            clickOutside: '&', // added for way 2
            },
            template:
                "<div class='btn-group' data-ng-class='{open: open}'>" +
                "<button class='btn btn-small'>Select...</button>" +
                "<button class='btn btn-small dropdown-toggle' data-ng-click='openDropdown()'><span class='caret'></span></button>" +
                "<ul class='dropdown-menu' aria-labelledby='dropdownMenu'>" +
                "<li><a data-ng-click='selectAll()'><span class='glyphicon glyphicon-ok green' aria-hidden='true'></span> Check All</a></li>" +
                "<li><a data-ng-click='deselectAll();'><span class='glyphicon glyphicon-remove red' aria-hidden='true'></span> Uncheck All</a></li>" +
                "<li class='divider'></li>" +
                "<li data-ng-repeat='option in options'><a data-ng-click='toggleSelectItem(option)'><span data-ng-class='getClassName(option)' aria-hidden='true'></span> {{option.PARTNAME}}</a></li>" +
                "</ul>" +
                "</div>",

           // controller: function ($scope) {

            link: function ($scope, element, attr) {

        // way 1
              //  element.bind('click', function (event) {
              //      console.log("event  " + event);
              //     event.stopPropagation();
              // });

              //  $document.bind('click', function () {
              //       $scope.isVisible = false;
              //      $scope.$apply();
              //  });

        // way 2
        $document.on('click', function (e) {
                if (el !== e.target && !el[0].contains(e.target)) {
                    $scope.$apply(function () {
                        $scope.$eval($scope.clickOutside);
                    });
                }
            });

                $scope.openDropdown = function () {
                    $scope.open = !$scope.open;
                };

                $scope.selectAll = function () {
                    $scope.model = [];
                    angular.forEach($scope.options, function (item, index) {
                        $scope.model.push(item.PART_ID);
                    });
                };

                $scope.deselectAll = function () {
                    $scope.model = [];
                };

                $scope.toggleSelectItem = function (option) {
                    var intIndex = -1;
                    angular.forEach($scope.model, function (item, index) {
                        if (item == option.PART_ID) {
                            intIndex = index;
                        }
                    });

                    if (intIndex >= 0) {
                        $scope.model.splice(intIndex, 1);
                    }
                    else {
                                         $scope.model.push(option.PART_ID);
                    }
                };

                $scope.getClassName = function (option) {
                    var varClassName = 'glyphicon glyphicon-remove red';
                    angular.forEach($scope.model, function (item, index) {
                        if (item == option.PART_ID) {
                            varClassName = 'glyphicon glyphicon-ok green';
                        }
                    });
                    return (varClassName);
                };
            }
        }
    }]);

Примечание: возможность выбора нескольких опций в раскрывающемся списке, и никаких проблем с какой-либо выборкой возникает только при закрытии по щелчку вне выпадающего списка.

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