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 相关文章推荐
菜单效果
Oct 14 Javascript
js实现的仿新浪微博完美的时间组件升级版
Dec 20 Javascript
浅析jQuery EasyUI中的tree使用指南
Dec 18 Javascript
谷歌showModalDialog()方法不兼容出现对话窗口的解决办法
Feb 15 Javascript
javascript RegExp 使用说明
May 21 Javascript
简单实现js浮动框
Dec 13 Javascript
Node.js连接postgreSQL并进行数据操作
Dec 18 Javascript
微信二次分享报错invalid signature问题及解决方法
Apr 01 Javascript
解决mui框架中switch开关通过js控制开或者关状态时小圆点不动的问题
Sep 03 Javascript
在vue中使用jsx语法的使用方法
Sep 30 Javascript
Vue切换Tab动态渲染组件的操作
Sep 21 Javascript
JavaScript小技巧带你提升你的代码技能
Sep 15 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的session过期设置
2013/06/29 PHP
php对象工厂类完整示例
2018/08/09 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
2019/05/30 PHP
jQuery 1.0.2
2006/10/11 Javascript
jquery $.ajax()取xml数据的小问题解决方法
2010/11/20 Javascript
js控制分页打印、打印分页示例
2014/02/08 Javascript
js 实现的可折叠留言板(附源码下载)
2014/07/01 Javascript
jQuery实用技巧必备(下)
2015/11/03 Javascript
浅谈js算法和流程控制
2016/12/29 Javascript
js表单序列化判断空值的实例
2017/09/22 Javascript
js实现倒计时器自定义时间和暂停
2019/02/25 Javascript
详解vue-cli3 中跨域解决方案
2019/04/10 Javascript
微信小程序的mpvue框架快速上手指南
2019/05/15 Javascript
vue实现跨域的方法分析
2019/05/21 Javascript
vue如何使用外部特殊字体的操作
2020/07/30 Javascript
[33:19]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第一场 11.26
2020/11/30 DOTA
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
2016/06/03 Python
用Pygal绘制直方图代码示例
2017/12/07 Python
Python Dataframe 指定多列去重、求差集的方法
2018/07/10 Python
Django rstful登陆认证并检查session是否过期代码实例
2019/08/13 Python
python实现对列表中的元素进行倒序打印
2019/11/23 Python
Python matplotlib修改默认字体的操作
2020/03/05 Python
使用CSS3的rem属性制作响应式页面布局的要点解析
2016/05/24 HTML / CSS
深入研究HTML5实现图片压缩上传功能
2016/03/25 HTML / CSS
大学军训通讯稿
2014/01/13 职场文书
学习雷锋精神心得体会范文
2014/03/12 职场文书
大学生社团活动总结
2014/04/26 职场文书
教师爱岗敬业演讲稿
2014/05/05 职场文书
网吧消防安全责任书
2014/07/29 职场文书
工程承包协议书范本
2014/09/29 职场文书
2014党员整改措施思想汇报
2014/10/07 职场文书
2014年居委会工作总结
2014/12/09 职场文书
小学优秀教师事迹材料
2014/12/16 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书
Python字典和列表性能之间的比较
2021/06/07 Python
Python人工智能之混合高斯模型运动目标检测详解分析
2021/11/07 Python