假设我们在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}}
< /跨度>
< /锂>
解决方法
您可以通过将$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.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。