javascript - 触发自定义 jquery 单击 Angular 自定义指令

标签 javascript jquery angularjs

我正在为 multiSelect 下拉菜单使用自定义指令。我需要使用自定义按钮自定义触发打开和关闭多选列表。

问题:我遇到了$apply already in progress错误

解决方案: 为了解决这个问题,我将 jQuery 函数包装在 $timeout

$timeout(function () {
    $('button.dropdown-toggle').trigger('click');
});

但是,现在我可以对指令进行自定义点击,并且我的 multiSelect 会打开,但现在如果我想在第二次点击时关闭选择框,它会闪烁并保持打开状态。 ;(

指令:

if (!parentFound) {
    $scope.$apply(function(){
        $scope.open = false;
    });
}

有人可以提出一个解决方案,以便我现在可以切换 multiSelect 下拉列表(在使用 $timeout 之后),而不是只在所有点击中打开吗?

enter image description here

最佳答案

只取反$scope值:

$scope.$apply(function() {
  if($scope.open) { //only close when it is open
    $scope.open = !$scope.open;
  }
});

如果您希望在选择框外单击时关闭下拉列表,您可以使用另一个自定义指令,它会在窗口上监听单击事件。这将广播一个您可以收听的新事件:

myApp.directive('dropdownListener', function ($window, $rootScope) {
    return {
        restrict: 'A',

        link: function(scope, element, attr) {
          var w = angular.element($window);

          w.bind('click', function(){
            $rootScope.$broadcast('dropdown:close');
          });
        }
    }
});

这意味着您可以通过包含监听器 dropdown:close 事件来修改原始操作:

$scope.$on('dropdown:close', function (event, data) {
   $scope.$apply(function() {
      if($scope.open) { //only close when it is open
        $scope.open = !$scope.open;
      }
    });
});

关于javascript - 触发自定义 jquery 单击 Angular 自定义指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35696226/

相关文章:

javascript - 模拟图像上传到 Cloudinary

javascript - 仅在 View 中时对元素位置产生视差效果

jQuery 附加第二类

javascript - AngularJS - $window.history.back() 的成功回调

javascript - 动态排列 md-dialog 标签

javascript - 查找最长的元音子串

javascript - 模态主体中无法识别 JS 代码。为什么?

javascript - 使用 JS 模糊将焦点转移到 div 上

javascript - 表格 td 标签中弹出框工具提示的问题

javascript - SVG:如何创建路径/获取路径的点