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 相关文章推荐
Jquery知识点三 jquery表单对象操作
Jan 17 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
May 27 Javascript
jQuery 鼠标经过(hover)事件的延时处理示例
Apr 14 Javascript
js兼容火狐获取图片宽和高的方法
May 21 Javascript
在JS中操作时间之getUTCMilliseconds()方法的使用
Jun 10 Javascript
javascript顺序加载图片的方法
Jul 18 Javascript
jQuery插件pagination实现无刷新分页
May 21 Javascript
第一次接触神奇的Bootstrap基础排版
Jul 26 Javascript
微信小程序 传值取值的几种方法总结
Jan 16 Javascript
jQuery使用正则验证15/18身份证的方法示例
Apr 27 jQuery
浅谈Webpack核心模块tapable解析
Sep 11 Javascript
django中使用vue.js的要点总结
Jul 07 Javascript
从零开始学习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
PHP中的Memcache详解
2014/04/05 PHP
PHP培训要多少钱
2017/06/06 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
2019/04/10 PHP
JS实现简单的键盘打字的效果
2015/04/24 Javascript
百度地图给map添加右键菜单(判断是否为marker)
2016/03/04 Javascript
JS 日期与时间戮相互转化的简单实例
2016/06/22 Javascript
node.js的事件机制
2017/02/08 Javascript
微信小程序 input输入及动态设置按钮的实现
2017/10/27 Javascript
vue2.0+vue-dplayer实现hls播放的示例
2018/03/02 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
2018/04/21 Javascript
vue路由结构可设一层方便动态添加路由操作
2020/08/31 Javascript
Python二叉搜索树与双向链表转换实现方法
2016/04/29 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
2018/04/25 Python
Python统计文本词汇出现次数的实例代码
2020/02/27 Python
pytorch判断是否cuda 判断变量类型方式
2020/06/23 Python
使用python修改文件并立即写回到原始位置操作(inplace读写)
2020/06/28 Python
五个2015 年最佳HTML5 框架
2015/11/11 HTML / CSS
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
日本高端护肤品牌:Tatcha
2016/08/29 全球购物
花园仓库建筑:Garden Buildings Direct
2018/02/16 全球购物
人事主管岗位职责范本
2013/12/04 职场文书
致百米运动员广播稿
2014/01/29 职场文书
电焊工岗位职责
2014/03/06 职场文书
2014学雷锋活动总结
2014/03/09 职场文书
新农村建设典型材料
2014/05/31 职场文书
运动会加油稿100字
2014/09/19 职场文书
2014年行政部工作总结
2014/11/19 职场文书
留学推荐信(中英文版)
2015/03/26 职场文书
青年志愿者活动感想
2015/08/07 职场文书
采购员工作总结范文
2015/08/12 职场文书
2016年优秀共青团员事迹材料
2016/02/25 职场文书
导游词之天下银坑景区
2019/11/21 职场文书
Python读取文件夹下的所有文件实例代码
2021/04/02 Python
Python基础之元编程知识总结
2021/05/23 Python
《进击的巨人》新联动CM 兵长强势出击兽巨人
2022/04/05 日漫