当前位置:首页 > 日记 > 正文

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

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

这两天学习了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片段先编译后再插入。

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

相关文章

excel2007使用t检验的方法excel200

excel2007使用t检验的方法excel200

方法,电脑软件,检验方法,  在Excel中经常录入好数据以后就需要进行数据检验,其中T检验较为常用,如果不懂得如何使用T检验的朋友不妨学习一番。下面是由小编分享的excel2007使用t检验的方法,供大家阅读、学习。excel2007使用t检验的方法T检验…

Painter制作像蒙太奇一样柔和的挥

Painter制作像蒙太奇一样柔和的挥

蒙太奇,柔和,效果,电脑软件,Painter,说明一点:这种效果比较适用于没有线或者线不太明显的图图,对于比较注重线条的CG来说出来的效果往往会出现&ldquo;单薄&rdquo;的感觉。另外这种效果可以单独只针对某一层或某一对象,也可以 做用于整张CG,.这…

ppt2010页码怎么设置从第二页开始

ppt2010页码怎么设置从第二页开始

设置,方法,页码,电脑软件,  前面我们知道了怎么在PowerPoint2013中给幻灯片添加默认格式的页码,是只有一个数字的那种,那如果我们需要的是那种加上了总页数的页码,怎么在ppt2013中第二页设置页码呢?下面小编就为你提供ppt2013如何设置页码的…

powerpoint无法插入页码怎么办

powerpoint无法插入页码怎么办

页码,解决办法,电脑软件,powerpoint,PPT,  在制作PPT时,会遇到各种问题,无法添加页码就属于其中一类,就那么要怎么解决呢?下面给大家分享PPT不能添加页码的解决办法吧,希望小编收集的资料对大家有用。PPT不能添加页码的解决办法新建一个幻灯…

新闻上下滚动jquery 超简洁 | 必看

新闻上下滚动jquery 超简洁 | 必看

上下滚动,必看,简洁,新闻,电脑软件,实例如下:<div class = "box"><dl class="textlist"><dd>11你好,欢迎来到</dd><dd>22你好,欢迎来到</dd><dd>33你好,欢迎来到</dd><dd>44你好,欢迎来到</dd><dd>55你好,欢迎来到</dd></dl></div><script>$(…

JavaScript闭包的简单应用

JavaScript闭包的简单应用

闭包,简单,电脑软件,JavaScript,闭包定义在JavaScript中,当一个内部函数被其外部函数之外的变量引用时,就形成了一个闭包。简单说,闭包就是能够读取其他函数内部变量的函数。闭包的作用:1. 可以读取函数内部的变量2. 让这些变量的值始终保持在…

Vue input控件通过value绑定动态属

Vue input控件通过value绑定动态属

动态,绑定,控件,方法,修饰符,对于单选按钮,勾选框及选择列表选项, v-model 绑定的 value 通常是静态字符串(对于勾选框是逻辑值):<!-- 当选中时,`picked` 为字符串 "a" --><input type="radio" v-model="picked" value="a"><!-- `toggle`…

excel2007怎样设置同时冻结行和列

excel2007怎样设置同时冻结行和列

设置,冻结,方法,电脑软件,  现在使用Word 2010和Excel 2010的人越来越多,但使用的广泛性并不代表其中的功能都容易掌握,今天,小编就教大家怎样在Excel 2010中冻结首行和首列的,只要你按照图示上的标示和数字一步步操作,欢迎大家来到学习。Exce…

jQuery Pagination分页插件_动力节

jQuery Pagination分页插件_动力节

分页,节点,插件,学院,动力,插件简介?此jQuery插件为Ajax分页插件,一次性加载,故分页切换时无刷新与延迟,如果数据量较大不建议用此方法,因为加载会比较慢。?原插件CSS不太合理,使用浮动,故无法方便实现左右方向的定位,且未清除浮动,在中文修改版中…

WPS表格中文字如何设置左右和上下

WPS表格中文字如何设置左右和上下

文字,方法,设置,表格,如何设置,  它在文字处理软件市场上拥有统治地位。WPS软件不仅仅是关于文字那么简单,下面我们一起学习它的功能吧。WPS表格中文字设置左右和上下居中的方法表格打开Word文档,在菜单栏中选择&ldquo;插入&rdquo;,点击&ldq…

Angular使用Md5加密的解决方法

Angular使用Md5加密的解决方法

解决方法,加密,电脑软件,Angular,一、现象用户登录时需要记住密码的功能,在前端需要对密码进行加密处理,增加安全性二解决1、利用npm(如果没有,先自行安装npm)安装ts-md5npm install ts-md5 --save-dev2、在使用的页面中导入import { Md5 } fr…

PS怎么设计一幅卷轴水墨山水画效果

PS怎么设计一幅卷轴水墨山水画效果

山水画,卷轴,一幅,水墨,效果图,ps中想要将山水画处理成水墨效果,放到画卷中,处理成水墨山水画效果,该怎么操作呢?下面我们就来看看详细的教程。软件名称:Adobe photoshop 7.01 官方正式简体中文版软件大小:154MB更新时间:2013-04-191、首先我们需…