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 相关文章推荐
Ext javascript建立超链接,进行事件处理的实现方法
Mar 22 Javascript
IE无法设置短域名下Cookie
Sep 23 Javascript
前台js改变Session的值(用ajax实现)
Dec 28 Javascript
浅谈JavaScript Math和Number对象
Jan 26 Javascript
简介JavaScript中的setTime()方法的使用
Jun 11 Javascript
简介AngularJS的HTML DOM支持情况
Jun 17 Javascript
jquery 动态增加,减少input表单的简单方法(必看)
Oct 12 Javascript
Bootstrap分页插件之Bootstrap Paginator实例详解
Oct 15 Javascript
EasyUI的DataGrid每行数据添加操作按钮的实现代码
Aug 22 Javascript
JavaScript解析及序列化JSON的方法实例分析
Jan 04 Javascript
vue+element实现图片上传及裁剪功能
Jun 29 Javascript
输入框跟随文字内容适配宽实现示例
Aug 14 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
js更优雅的兼容
2010/08/12 Javascript
jquery插件制作教程 txtHover
2012/08/17 Javascript
js解决弹窗问题实现班级跳转DIV示例
2014/01/06 Javascript
Javascript学习笔记之 对象篇(三) : hasOwnProperty
2014/06/24 Javascript
DIV随滚动条滚动而滚动的实现代码【推荐】
2016/04/12 Javascript
JS克隆,属性,数组,对象,函数实例分析
2016/11/26 Javascript
利用Query+bootstrap和js两种方式实现日期选择器
2017/01/10 Javascript
Angular2 PrimeNG分页模块学习
2017/01/14 Javascript
jQuery实现搜索页面关键字的功能
2017/02/16 Javascript
JSONP基础知识详解
2017/03/19 Javascript
在 Angular 中实现搜索关键字高亮示例
2017/03/21 Javascript
Angular2中监听数据更新的方法
2018/08/31 Javascript
基于layui实现高级搜索(筛选)功能
2019/07/26 Javascript
layui的表单提交以及验证和修改弹框的实例
2019/09/09 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
python处理二进制数据的方法
2015/06/03 Python
解决Scrapy安装错误:Microsoft Visual C++ 14.0 is required...
2017/10/01 Python
python设置值及NaN值处理方法
2018/07/03 Python
python 遍历目录(包括子目录)下所有文件的实例
2018/07/11 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
Python面向对象程序设计之类的定义与继承简单示例
2019/03/18 Python
解决python3 安装不了PIL的问题
2019/08/16 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
2020/03/08 Python
python 异步async库的使用说明
2020/05/04 Python
HTML5标签嵌套规则详解【必看】
2016/04/26 HTML / CSS
打架检讨书50字
2014/01/11 职场文书
前厅收银主管岗位职责
2014/02/04 职场文书
本科毕业生应聘自荐信范文
2014/06/26 职场文书
化学专业大学生职业生涯规划范文
2014/09/13 职场文书
小学生毕业评语
2014/12/26 职场文书
新员工试用期自我评价
2015/03/10 职场文书
关于销售人员的年终工作总结要点
2019/08/15 职场文书
python关于集合的知识案例详解
2021/05/30 Python
MySQL8.0无法启动3534的解决方法
2021/06/03 MySQL
Python数据可视化之基于pyecharts实现的地理图表的绘制
2021/06/10 Python