微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在angularjs中显示动态选项菜单的最佳(最有效)方式

假设我们在UI中有很多项目.当用户单击某个项目时,UI应该显示一个弹出/拨号/覆盖元素,其中包含一些选项,操作等.

目前我看到两个选项:

>复制每个项目的叠加元素并将其隐藏,直到单击关联的项目.喜欢这个小提琴:http://jsfiddle.net/urPww/1/

< div ng-show =“currentItem”>
        显示以下选项:{{currentItem.name}}
    < / DIV>
    < li ng-repeat =“项目中的项目”ng-click =“showOptions(item)”>
        {{项目名称}}
    < /锂>
>放置覆盖UI一次并跟踪最后点击的项目.演示:http://jsfiddle.net/aVnPT/5/

< li ng-repeat =“项目中的项目”ng-click =“showOptions(item)”>
        {{项目名称}}
        < span ng-show =“item.showingOptions”>
            < br />显示以下选项:{{item.name}}
        < /跨度>
    < /锂>

第一种解决方案效率不高.然而,除了第二个中单击的元素之外,我无法弄清楚如何显示叠加UI.有任何想法吗?

解决方法

您可以通过将$event作为参数传递给ng-click函数来使用单个元素.然后可以获得相对于文档的鼠标点击位置

app.directive('container',function () {

    var offset = {
        left: 40,top: -20
    }
    return function (scope,element,attributes) {
        var $oLay = angular.element(document.getElementById('overlay'))

        scope.showOptions = function (item,$event) {       
            var overlaydisplay;
            if (scope.currentItem === item) {
                scope.currentItem = null;
                 overlaydisplay='none'
            }else{
                 scope.currentItem = item;
                overlaydisplay='block'
            }

            var overLayCSS = {
                left: $event.clientX + offset.left + 'px',top: $event.clientY + offset.top + 'px',display: overlaydisplay
            }

             $oLay.css(overLayCSS)
        }
    }
});

我不确定是否将jQuery对不同浏览器的方式规范化为clientX和clientY.并非所有浏览器都对事件位置属性使用相同的约定已从overlay元素中删除了ng-show,因此它的样式属性可以从指令控制,而不是由角度编译器控制由于时间,并给它一个id.

演示:http://jsfiddle.net/jJyTf/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐