AngularJS实现给动态生成的元素绑定事件的方法


Posted in Javascript onDecember 14, 2016

本文实例讲述了AngularJS实现给动态生成的元素绑定事件的方法。分享给大家供大家参考,具体如下:

1 . 我们知道在jQuery中,动态生成一个元素,如果要在动态生成元素的同时,动态绑定事件,可以通过live/on方法(在jquery3.0中已经废除了bind方法)。

2 . 在AngularJS中,操作DOM一般在指令中完成,事件监听机制是在对于已经静态生成的dom绑定事件,而如果在指令中动态生成了DOM节点,动态生成的节点不会被JS事件监听。

举例来说:

angular.module('myapp',[])
.directive('myText',function(){
  return{
    restrict:'A',
    template:'<div ng-click="hello()">Hi everyone</div>',
    link:function(scope,ele,attr){
    }
  }
})

这个指令中,会生成新的DOM节点:

<div ng-click="hello()">Hi everyone</div>

但是如果不做处理,这里的ng-click事件并不能实现,因为事件的监听在静态html页面生成时候已经完成。那么如何给动态生成的元素,绑定事件,实现事件的动态监听呢?

3 . 通过$compile服务,编译DOM,实现动态的事件绑定

var template:'<div ng-click="hello()">Hi everyone</div>',
var content = $compile(template)(scope);

通过这两句,首先先编译DOM,然后用编译后的DOM加入到之前的静态节点中,就能实现动态绑定事件,之类注意,应该注入$compile service

.directive('myText',function($compile){})

完整的代码如下:

angular.module('myapp',[])
.directive('myText',function($compile){
  var template:'<div ng-click="hello()">Hi everyone</div>',
  return{
    restrict:'A',
    link:function(scope,ele,attr){
       ele.on("click", function() {
        scope.$apply(function() {
          var content = $compile(template)(scope);
          element.append(content);
        })
      });
    }
  }
})

希望本文所述对大家AngularJS程序设计有所帮助。

Javascript 相关文章推荐
JS+DIV实现鼠标划过切换层效果的实例代码
Nov 26 Javascript
JavaScript获得当前网页来源页面(即上一页)的方法
Apr 03 Javascript
JSON与XML优缺点对比分析
Jul 17 Javascript
jQuery中animate的几种用法与注意事项
Dec 12 Javascript
JS按钮闪烁功能的实现代码
Jul 21 Javascript
JavaScript30 一个月纯 JS 挑战中文指南(英文全集)
Jul 23 Javascript
JS实现前端缓存的方法
Sep 21 Javascript
bootstrapTable+ajax加载数据 refresh更新数据
Aug 31 Javascript
js取小数点后两位四种方法
Jan 18 Javascript
微信小程序五子棋游戏AI实现方法【附demo源码下载】
Feb 20 Javascript
微信小程序利用for循环解决内容变更问题
Mar 05 Javascript
TypeScript的安装、使用、自动编译的实现
Apr 10 Javascript
Bootstrap导航条的使用和理解3
Dec 14 #Javascript
jQuery学习笔记之入门
Dec 14 #Javascript
Bootstrap轮播图的使用和理解4
Dec 14 #Javascript
12 款 JS 代码测试必备工具(翻译)
Dec 13 #Javascript
使用BootStrap实现悬浮窗口的效果
Dec 13 #Javascript
关于微信jssdk实现多图片上传的一点心得分享
Dec 13 #Javascript
微信页面倒计时代码(解决safari不兼容date的问题)
Dec 13 #Javascript
You might like
PHP中文分词的简单实现代码分享
2011/07/17 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
PHP实现自动对图片进行滚动显示的方法
2015/03/12 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
2016/05/13 PHP
Javascript 日期处理之时区问题
2009/10/08 Javascript
超轻量级的基于jquery的三级展开列表
2011/04/26 Javascript
JavaScript实现为指定对象添加多个事件处理程序的方法
2015/04/17 Javascript
详解Angular Reactive Form 表单验证
2017/07/06 Javascript
详谈commonjs模块与es6模块的区别
2017/10/18 Javascript
vue 使某个组件不被 keep-alive 缓存的方法
2018/09/21 Javascript
JS函数动态传递参数的方法分析【基于arguments对象】
2019/06/05 Javascript
vue实现点击追加选中样式效果
2019/11/01 Javascript
关于vue属性使用和不使用冒号的区别说明
2020/10/22 Javascript
关于angular 8.1使用过程中的一些记录
2020/11/25 Javascript
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
Python中的filter()函数的用法
2015/04/27 Python
Tornado协程在python2.7如何返回值(实现方法)
2017/06/22 Python
详解Python函数可变参数定义及其参数传递方式
2017/08/02 Python
python实现读Excel写入.txt的方法
2018/04/29 Python
Python 字符串与数字输出方法
2018/07/16 Python
python 将列表中的字符串连接成一个长路径的方法
2018/10/23 Python
python实现合并多个list及合并多个django QuerySet的方法示例
2019/06/11 Python
在Django下测试与调试REST API的方法详解
2019/08/29 Python
Python缓存技术实现过程详解
2019/09/25 Python
树莓派极简安装OpenCv的方法步骤
2019/10/10 Python
使用Tensorflow-GPU禁用GPU设置(CPU与GPU速度对比)
2020/06/30 Python
纯CSS3实现的阴影效果
2014/12/24 HTML / CSS
韩国美国时尚服装和美容在线全球市场:KOODING
2018/11/07 全球购物
介绍一下MD5加密算法
2016/11/12 面试题
商场经理竞聘演讲稿
2014/01/01 职场文书
副总经理岗位职责
2015/02/02 职场文书
社区活动总结
2015/02/04 职场文书
社区安全温馨提示语
2015/07/14 职场文书
新手必备之MySQL msi版本下载安装图文详细教程
2021/05/21 MySQL
了解Redis常见应用场景
2021/06/23 Redis
SQL Server删除表中的重复数据
2022/05/25 SQL Server