首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJS - stopPropagation

AngularJS - stopPropagation
EN

Stack Overflow用户
提问于 2013-05-03 00:42:07
回答 1查看 1.6K关注 0票数 1

我真的很难实现stopPropagation。我目前正在使用多个下拉菜单。我想对其进行设置,以便当您打开一个菜单,然后单击该菜单之外的任何位置时,该菜单将被关闭。理想情况下,一次只能打开一个菜单,所以当您打开一个菜单,然后单击另一个菜单时,第一个菜单将被关闭。

也许我正在以一种完全错误的方式来处理这个问题。如果是这样的话,我会很感激大家在正确的方向上点头!

谢谢!

下面是我如何处理下拉菜单的打开和关闭:

代码语言:javascript
复制
<a ng-click="popout.isVisible = !popout.isVisible">Drop Menu #1</a>
<ul ng-show="popout.isVisible">
    <li>This is some text.</li>
    <li>This is some text.</li>
    <li>This is some text.</li>
</ul>

<a ng-click="popout.isVisible = !popout.isVisible">Drop Menu #2</a>
<ul ng-show="popout.isVisible">
    <li>This is some text.</li>
    <li>This is some text.</li>
    <li>This is some text.</li>
</ul>

下面是我找到的一些创建stopEvent指令的代码,但它们的工作方式并不完全符合我的需要:

代码语言:javascript
复制
myApp.directive('stopEvent', function () {
  return {
    link: function (scope, element, attr) {
      element.bind(attr.stopEvent, function (e) {
          e.stopPropagation();
          alert('ALERT!');
      });
    }
  };
});
EN

回答 1

Stack Overflow用户

发布于 2013-05-03 01:15:49

您在那里引用了stopEvent指令,这在我看来很好,但是您实际上并没有在您的HTML中使用它。下面是您所描述的内容的一个非常基本的实现:

http://jsfiddle.net/KzfSM/1/

HTML

代码语言:javascript
复制
<div ng-app="app" ng-controller="p" ng-click="hideEverything()">

    <a ng-click="popout[0].isVisible = !popout[0].isVisible" stop-event="click">Drop Menu #1</a>
<ul ng-show="popout[0].isVisible" stop-event="click">
    <li>1111</li>
    <li>This is some text.</li>
    <li>This is some text.</li>
</ul>

<a ng-click="popout[1].isVisible = !popout[1].isVisible" stop-event="click">Drop Menu #2</a>
<ul ng-show="popout[1].isVisible" stop-event="click">
    <li>2222</li>
    <li>This is some text.</li>
    <li>This is some text.</li>
</ul>


</div>

JavaScript

代码语言:javascript
复制
function p($scope) {
    $scope.popout = [ {}, {} ];
    $scope.hideEverything = function () {
        alert('hiding');
        $scope.popout[0].isVisible = false;
        $scope.popout[1].isVisible = false;
    };
}

angular
.module('app', [])
.directive('stopEvent', function () {
  return {
    link: function (scope, element, attr) {
      element.bind(attr.stopEvent, function (e) {
          e.stopPropagation();
          alert('ALERT!');
      });
    }
  };
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16343387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档