Angularjs 动态添加指令并绑定事件的方法


Posted in Javascript onApril 13, 2017

这两天学习了angularjs 感觉指令这个地方知识点挺多的,而且很重要,所以,今天添加一点小笔记。

先说使用场景,动态生成DOM元素并绑定事件,非常常见的一种场景,用jq实现效果:

var count=0;
$("#test").on("click",function(event){
 if(event.target.tagName.toLowerCase()=="input") return;
 count++;
 var html="<input type='text' class='newEle' value='"+count+"'/>";
 $(this).html(html);
 $(".newEle").focus();
});
$("body").on("blur",".newEle",function(){
 alert($(this).val());
})

如果用angularjs应该怎么实现呢?想当然的情况是这样的:

var myApp = angular.module('myApp', []);
    myApp.controller('MainCtrl', ['$scope','$compile',function($scope) {
      $scope.count = 0;
      $scope.add = function() {
       if(event.target.tagName.toLowerCase()=="input")return;
        var target=$(event.target);
        $scope.count++;
        target.html("<input value='"+$scope.count+"' ng-blur='showValue()'>" );
      }
      $scope.showValue=function(){
        alert(event.target.value)
      }
    }])

理想很丰满,点击test的时候内容确实变成了input,但是input不能绑定任何ng事件。

var myApp = angular.module('myApp', []);
    myApp.controller('MainCtrl', ['$scope','$compile',function($scope, $compile) {
      $scope.count = 0;
      $scope.add = function() {
       if(event.target.tagName.toLowerCase()=="input")return;
        var target=$(event.target);
        $scope.count++;
        target.html($compile("<input value='"+$scope.count+"' ng-blur='showValue()'>")($scope));
      }
      $scope.showValue=function(){
        alert(event.target.value)
      }
    }])

达到目的~

这里用到了$compile服务,官方的解释是compile可以将一个HTML字符串或者DOM编译成模板,该模板能够与scope链接起来,也就是说直接插入一段html片段到页面中,虽然能插入进去,但是angular并没有编译,所以任何ng事件指令绑定都是无效的,通过compile能够将html片段先编译后再插入。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
线路分流自动智能跳转代码,自动选择最快镜像网站(js)
Oct 31 Javascript
js计算精度问题小结
Apr 22 Javascript
js操作iframe的一些方法介绍
Jun 25 Javascript
异步动态加载JS并运行(示例代码)
Dec 13 Javascript
JavaScript如何调试有哪些建议和技巧附五款有用的调试工具
Oct 28 Javascript
常用javascript表单验证汇总
Jul 20 Javascript
bootstrap实现弹窗和拖动效果
Jan 03 Javascript
基于BootStrap Metronic开发框架经验小结【五】Bootstrap File Input文件上传插件的用法详解
May 12 Javascript
JavaScript中instanceof运算符的使用示例
Jun 08 Javascript
Bootstrap实现弹性搜索框
Jul 11 Javascript
微信小程序wepy框架学习和使用心得详解
May 24 Javascript
vue实现图片裁剪后上传
Dec 16 Vue.js
从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
Apr 13 #Javascript
JS传参及动态修改页面布局
Apr 13 #Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
Apr 13 #Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
Apr 13 #Javascript
MUI  Scroll插件的使用详解
Apr 13 #Javascript
MUI 上拉刷新/下拉加载功能实例代码
Apr 13 #Javascript
从零开始学习Node.js系列教程四:多页面实现的数学运算示例
Apr 13 #Javascript
You might like
mysql中存储过程、函数的一些问题
2007/02/14 PHP
可定制的PHP缩略图生成程式(需要GD库支持)
2007/03/06 PHP
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
2013/06/21 PHP
PHP验证终端类型是否为手机的简单实例
2017/02/07 PHP
PHP 文件锁与进程锁的使用示例
2017/08/07 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
2017/10/12 PHP
如何重写Laravel异常处理类详解
2020/12/20 PHP
JS date对象的减法处理实现代码
2010/12/28 Javascript
jquery 无限级联菜单案例分享
2013/03/26 Javascript
jquery 提示信息显示后自动消失的具体实现
2013/12/18 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
2014/02/04 Javascript
推荐三款日期选择插件(My97DatePicker、jquery.datepicker、Mobiscroll)
2017/04/21 jQuery
基于jQuery实现图片推拉门动画效果的两种方法
2017/08/26 jQuery
JsChart组件使用详解
2018/03/04 Javascript
js中DOM事件绑定分析
2018/03/18 Javascript
vue裁切预览组件功能的实现步骤
2018/05/04 Javascript
vue修改对象的属性值后页面不重新渲染的实例
2018/08/09 Javascript
vue使用Font Awesome的方法步骤
2019/02/26 Javascript
element-ui 文件上传修改文件名的方法示例
2019/11/05 Javascript
Vue实现计算器计算效果
2020/08/17 Javascript
React Ant Design树形表格的复杂增删改操作
2020/11/02 Javascript
[07:39]第一届亚洲邀请赛回顾视频
2017/02/14 DOTA
[56:14]Fnatic vs OG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
用Python制作检测Linux运行信息的工具的教程
2015/04/01 Python
使用python和Django完成博客数据库的迁移方法
2018/01/05 Python
详解Django CAS 解决方案
2019/10/30 Python
Tensorflow的常用矩阵生成方式
2020/01/04 Python
django列表筛选功能的实现代码
2020/03/27 Python
纯css3无js实现的Android Logo(有简单动画)
2013/01/21 HTML / CSS
自动化专业毕业生自荐信
2013/11/01 职场文书
实习生自我评价
2014/01/18 职场文书
机关保密承诺书
2014/06/03 职场文书
付款委托书范本
2014/10/05 职场文书
正风肃纪查摆剖析材料
2014/10/10 职场文书
怎样写离婚协议书
2015/01/26 职场文书
干货:如何写好工作总结报告!
2019/05/10 职场文书