使用 Directives 注入 DOM 元素 AngularJS
Injecting DOM elements AngularJS using Directives
我对<li>
有一个这样的<ul>
:
<li ng-repeat="x in xs" ng-class-odd="'x'" ng-class-even="'y'">
// inject here
<span>
{{x.v}}
</span>
</li>
我想在某个事件上注入一个上下文菜单(上面描述的 DOM 位置),如下所示:
<ul id="context" class="col">
<li class="three"><span>1</span></li>
<li class="three"><span>2</span></li>
<li class="three"><span>3</span></li>
</ul>
实现此目的的最佳方法是什么? 上面的 1、2 和 3 具有相同的函数来处理父容器中的重复列表项。所以我不确定如上所述注入上下文菜单是否是一个聪明的主意,因为它会生成上下文菜单的未播种重复。
谢谢。
这是一组上下文菜单指令的一个非常基本的示例,其中菜单在正文中插入一次。
一个指令用于绑定 contenxtmenu
事件并将数据发送到控制菜单本身的指令。
所选项目和鼠标位置将作为广播中的数据传递
.HTML
<ul>
<li ng-repeat="item in items" context="item">{{item.title}}</li>
</ul>
<ul menu id="context" ng-show="menu_on">
<li ng-click="itemAlert('id')">Alert ID</li>
<li ng-click="itemAlert('title')">Alert Title</li>
</ul>
.JS
app.directive('context', function($rootScope) {
return {
restrict: 'A',
scope: {
item: '=context'
},
link: function(scope, elem) {
elem.bind('contextmenu', function(evt) {
evt.preventDefault();
var data = {
pos: { x: evt.clientX, y: evt.clientY},
item: scope.item
}
scope.$apply(function(){
$rootScope.$broadcast('menu', data);
});
});
}
}
})
app.directive('menu', function($rootScope) {
return {
restrict: 'A',
link: function(scope, elem) {
scope.$on('menu', function(evt, data) {
scope.menu_on = true;
scope.item = data.item;
var cssObj = {
left: data.pos.x + 20 + 'px',
top: data.pos.y - 40 + 'px'
};
elem.css(cssObj)
});
scope.itemAlert = function(prop) {
scope.menu_on = false;
alert(scope.item[prop])
}
}
}
});
当用户单击菜单外部时,需要一些额外的文档侦听器来关闭菜单。这里的目标是创建能够显示菜单和传递数据的基本机制。
我没有看过,但可能已经有一些开源指令比这先进得多。
演示
相关文章:
- AngularJS/HTML/Bootstrap元素用于动态搜索结果
- AngularJS指令,在元素后插入HTML
- 使用AngularJS Directive WHITOUT$scope创建一个动态html元素
- angularjs删除动态形式元素中的特殊字符
- 从父元素AngularJS中获取多个输入字段的值
- 将持久活动类附加到导航栏范围中的导航元素(AngularJS)
- 展开/折叠树中的子元素(AngularJS)
- 来自Svc的数据未建模到视图元素AngularJS中
- 使用 Directives 注入 DOM 元素 AngularJS
- 获取元素angularJS的点击事件的html elemnt类型
- 从循环中隐藏元素(AngularJS)
- 真正阻止元素绑定-取消绑定元素-AngularJS
- jQuery在ngView加载的元素[AngularJS]上找不到元素
- CSS第n个子代不'无法处理动态隐藏元素[AngularJS]
- 如何防止父单击事件时,用户单击他的子元素?AngularJS
- 从列表中渲染输入中的特定元素——AngularJS
- $index的元素变化,而使用过滤器如何获得正确的索引元素angularjs
- 点击链接后滚动到不同模板上的特定元素(Angularjs)
- 点击body隐藏元素angularjs
- 选择/取消选择所有复选框元素AngularJS