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工具 Event封装
Aug 21 Javascript
JavaScript Event学习第十章 一些可替换的事件对
Feb 10 Javascript
Javascript 判断客户端浏览器类型代码
Mar 01 Javascript
JS获取当前使用的浏览器名字以及版本号实现方法
Aug 19 Javascript
JavaScript ES6中export、import与export default的用法和区别
Mar 14 Javascript
vue.js中npm安装教程图解
Apr 10 Javascript
vue踩坑记-在项目中安装依赖模块npm install报错
Apr 02 Javascript
Node.js事件的正确使用方法
Apr 05 Javascript
详解小程序毫秒级倒计时(适用于拼团秒杀功能)
May 05 Javascript
JS面向对象编程基础篇(三) 继承操作实例详解
Mar 03 Javascript
在vue中使用vant TreeSelect分类选择组件操作
Nov 02 Javascript
vue-drawer-layout实现手势滑出菜单栏
Nov 19 Vue.js
从零开始学习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文件操作实现代码分享
2011/09/01 PHP
CI框架自动加载session出现报错的解决办法
2014/06/17 PHP
PHP使用mysqli操作MySQL数据库的简单方法
2017/02/04 PHP
在laravel中使用Symfony的Crawler组件分析HTML
2017/06/19 PHP
win10下 php安装seaslog扩展的详细步骤
2020/12/04 PHP
jQuery学习笔记(4)--Jquery中获取table中某列值的具体思路
2013/04/10 Javascript
js单向链表的具体实现实例
2013/06/21 Javascript
JS响应鼠标点击实现两个滑块区间拖动效果
2015/10/26 Javascript
详解Angular的数据显示优化处理
2016/12/26 Javascript
Bootstrap缩略图的创建方法
2017/03/22 Javascript
node.js连接MongoDB数据库的2种方法教程
2017/05/17 Javascript
深入理解ES6中let和闭包
2018/02/22 Javascript
Vue使用v-viewer实现图片预览
2020/10/21 Javascript
phpsir 开发 一个检测百度关键字网站排名的python 程序
2009/09/17 Python
Python中使用装饰器时需要注意的一些问题
2015/05/11 Python
python调用Delphi写的Dll代码示例
2017/12/05 Python
Python序列循环移位的3种方法推荐
2018/04/09 Python
使用python实现简单五子棋游戏
2019/06/18 Python
python实现中文文本分句的例子
2019/07/15 Python
python爬虫基础之urllib的使用
2020/12/31 Python
详解CSS3开启硬件加速的使用和坑
2017/08/21 HTML / CSS
波兰购物网站:MALL.PL
2019/05/01 全球购物
POS解决方案:MUNBYN(热敏打印机、条形码扫描仪)
2020/06/09 全球购物
JDO的含义
2012/11/17 面试题
总务岗位职责
2013/11/19 职场文书
优秀导游先进事迹材料
2014/01/25 职场文书
安全大检查反思材料
2014/01/31 职场文书
企业内部培训方案
2014/02/04 职场文书
教师年度考核评语
2014/04/28 职场文书
售后服务承诺函格式
2015/01/21 职场文书
清明节网上祭英烈寄语2015
2015/03/04 职场文书
公司催款律师函
2015/05/27 职场文书
2015国庆节感想
2015/08/04 职场文书
厉行节约工作总结
2015/08/12 职场文书
python爬取豆瓣电影TOP250数据
2021/05/23 Python
分享7个 Python 实战项目练习
2022/03/03 Python