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+FSO遍历文件夹下文件并显示
Mar 07 Javascript
给网站上的广告“加速”显示的方法
Apr 08 Javascript
Javascript中eval函数的使用方法与示例
Apr 09 Javascript
JS获取并操作iframe中元素的方法
Mar 21 Javascript
利用了jquery的ajax实现二级联互动菜单
Dec 02 Javascript
浅析js预加载/延迟加载
Sep 25 Javascript
javascript实现随机显示星星特效
Jan 28 Javascript
AngularJS监听路由的变化示例代码
Sep 23 Javascript
使用ngrok+express解决本地环境中微信接口调试问题
Feb 26 Javascript
轻量级JS Cookie插件js-cookie的使用方法
Mar 22 Javascript
javascript 构建模块化开发过程解析
Sep 11 Javascript
Nuxt配置Element-UI按需引入的操作方法
Jul 06 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 正则 过滤html 的超链接
2009/06/02 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
PHP目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
2016/09/11 PHP
ajax 缓存 问题 requestheader
2010/08/01 Javascript
基于jquery的复制网页内容到WORD的实现代码
2011/02/16 Javascript
JS实现多物体缓冲运动实例代码
2013/11/29 Javascript
Javascript基础教程之关键字和保留字汇总
2015/01/18 Javascript
最简单的JavaScript验证整数、小数、实数、有效位小数正则表达式
2015/04/17 Javascript
不得不分享的JavaScript常用方法函数集(下)
2015/12/25 Javascript
JavaScript提高性能知识点汇总
2016/01/15 Javascript
javascript实现PC网页里的拖拽效果
2016/03/14 Javascript
基于gulp合并压缩Seajs模块的方式说明
2016/06/14 Javascript
EasyUI折叠表格层次显示detailview详解及实例
2016/12/28 Javascript
基于JavaScript实现的插入排序算法分析
2017/04/14 Javascript
React组件之间的通信的实例代码
2017/06/27 Javascript
js与jQuery实现的用户注册协议倒计时功能实例【三种方法】
2017/11/09 jQuery
jQuery控制input只能输入数字和两位小数的方法
2019/05/16 jQuery
微信小程序 image组件遇到的问题
2019/05/28 Javascript
基于Express框架使用POST传递Form数据
2019/08/10 Javascript
OpenLayers3实现地图显示功能
2020/09/25 Javascript
[56:00]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第一局
2016/03/05 DOTA
[01:14:12]2018DOTA2亚洲邀请赛4.7 总决赛 LGD vs Mineski 第二场
2018/04/09 DOTA
[01:20]2018DOTA2亚洲邀请赛总决赛战队Mineski晋级之路
2018/04/07 DOTA
python实现的jpg格式图片修复代码
2015/04/21 Python
python中判断文件编码的chardet(实例讲解)
2017/12/21 Python
Python二元赋值实用技巧解析
2019/10/25 Python
荷兰家电购物网站:Expert.nl
2020/01/18 全球购物
致800米运动员广播稿
2014/02/16 职场文书
员工工作表现评语
2014/04/26 职场文书
大专生自荐书范文
2014/06/22 职场文书
我的生日感言
2015/08/03 职场文书
教学工作总结范文5篇
2019/08/19 职场文书
HTML基础-标签分类(闭合标签,空标签,块级元素,行内元素,行级块元素,可替换元素)
2021/03/31 HTML / CSS
使用Golang的channel交叉打印两个数组的操作
2021/04/29 Golang
javascript遍历对象的五种方式实例代码
2021/10/24 Javascript
Win11 vmware不兼容怎么办?Win11与VMware虚拟机不兼容的解决方法
2023/01/09 数码科技