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

http://jsbin.com/gajizuyuju/edit?html,js,output

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事件。

稍微修改下:http://jsbin.com/zujalapone/edit?html,js,output

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片段先编译后再插入。

最新文章

  1. IOS开发之学习《AV Foundation 开发秘籍》
  2. O(n)求1-n的逆元
  3. 【转载】酷酷的CSS3三角形运用
  4. AJAX中的请求方式以及同步异步的区别
  5. gcc使用笔记
  6. IE attachEvent事件处理程序(事件绑定的函数)的this指向的是window不是执行当前事件的dom元素
  7. [转]MySQL 5.6 全局事务 ID(GTID)实现原理(一)
  8. 导入maven项目时出现 Version of Spring Facet could not be detected. 解决方法
  9. 第一行代码阅读笔记---AndroidMainfest.xml分析
  10. php架构之路
  11. java解析复杂json:JSONObject 和 JSONArray的使用
  12. ES6定型数组
  13. http://python.jobbole.com/85056/ 简单 12 步理解 Python 装饰器,https://www.cnblogs.com/deeper/p/7482958.html另一篇文章
  14. PLT redirection through shared object injection into a running process
  15. 架设FTP Server-Windows Server 2012
  16. 2018.08.17 洛谷P3135 [USACO16JAN]堡哞(前缀和处理)
  17. 170511、Spring IOC和AOP 原理彻底搞懂
  18. 集群监控之 —— ipmi操作指南
  19. 基于ZooKeeper实现——分布式锁与实现
  20. Linux 入门记录:十七、Linux 命令行文本/文件处理工具

热门文章

  1. muduo库整体架构简析
  2. angular.js之作用域scope&#39;@&#39;,&#39;=&#39;,&#39;&amp;&#39;
  3. iOS 注册密码加密 添加了时间戳 遇到的问题...
  4. Linux下修改系统时区
  5. Unity Shader 知识点总结(一)
  6. ThinkPhp框架的数据库操作(查询)
  7. 配置Server Side TAF
  8. 常见的html面试题
  9. Python全栈开发——Linux命令学习
  10. node c++多线程插件 第一天 c++线程相关函数