博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Angularjs 动态添加指令并绑定事件
阅读量:6722 次
发布时间:2019-06-25

本文共 1556 字,大约阅读时间需要 5 分钟。

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

var count=0;$("#test").on("click",function(event){  if(event.target.tagName.toLowerCase()=="input") return;  count++;  var html="";  $(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("" );            }            $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("")($scope));            }            $scope.showValue=function(){                alert(event.target.value)            }        }])

达到目的~

这里用到了服务,官方的解释是compile可以将一个HTML字符串或者DOM编译成模板,该模板能够与scope链接起来,也就是说直接插入一段html片段到页面中,虽然能插入进去,但是angular并没有编译,所以任何ng事件指令绑定都是无效的,通过compile能够将html片段先编译后再插入。

 

转载于:https://www.cnblogs.com/hutuzhu/p/6674797.html

你可能感兴趣的文章
BurpSuite系列----Extender模块(扩展器)
查看>>
CSS media queries
查看>>
session的序列化、钝化、活化
查看>>
PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结...
查看>>
==与===的区别
查看>>
JS 在指定数组中随机取出N个不重复的数据
查看>>
软件开发模型
查看>>
Windows Store App下代码加载page resource和resw文件里的string
查看>>
数据结构基本知识点总结
查看>>
【翻译】前景img-sprites, 高对比模式分析
查看>>
进程和线程的一个简单形象的解释
查看>>
The road to learning English-Grammar
查看>>
Python多线程编程之多线程加锁
查看>>
shell报错:-bash: [: ==: 期待一元表达式 解决方法 ([: ==: unary operator expected)
查看>>
opengl 杂记
查看>>
兼容MIUI5和MIUI6的开启悬浮窗设置界面
查看>>
基于FPGA的DDS设计(一)
查看>>
.net 开发框架(一)[数据通用层]
查看>>
sql-ISNULL函数(转载)
查看>>
天启android5.1系统无法在非1650批次号的rk3288w芯片上启动
查看>>