angular 实现 下拉菜单 的 点击其他区域关闭下拉菜单功能?

clipboard.png

clipboard.png

clipboard.png

代码如图, 点击 div.selected 的时候 ul.dorpdown-list 就会显示 点击 li 的时候 ul收起 并且 赋值给selectedVal

现在还有个需求是 点击dorpDown 指令外的部分 要收起 ul.dorpdown-list

怎么办呢?

阅读 9.5k
4 个回答

绑定页面单击事件,关闭下拉菜单功能,举个列子

//html---------------
<div ng-controller="ctrl">
    <input type="button" value="点击" ng-click="showListClick($event)"/>
    <ul ng-show="showFlag" style="display: none;">
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
    </ul>
</div>

//script------------------------
myApp.controller('ctrl', function( $scope,$document ){
    
    $scope.showFlag=false;
    $scope.showListClick=function($event){
        $event.stopPropagation();
        $scope.showFlag=true;
    }
    
    //绑定页面单击事件,关闭下拉菜单功能
    $document.bind("click", function(event) {
        $scope.showFlag=false;
        $scope.$apply();             
     }); 
});

其实你只要写select就可以达到你的目标
``
<select ng-model="selected">
<option></option>
</select>
``

简单的方法,直接写一个div包含你要的下拉列表,加个遮罩就可以了,遮罩部分加ng-click事件让下拉的div隐藏。div中ng-repeat循环选项,选项的ng-click事件来确定你选择的数据(传所选对象,不要传$index)。这个东西没必要写指令,如果需要多次重用,再写指令。

在你的指令里面写一个函数 监听一个事件 外面写一个documentclick的方法,执行的时候执行这个方法 影藏掉,点击自己的时候阻止冒泡

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题