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 相关文章推荐
建立良好体验度的Web注册系统ajax
Jul 09 Javascript
js数组的操作详解
Mar 27 Javascript
Javascript/Jquery——简单定时器的多种实现方法
Jul 03 Javascript
JavaScript中的继承方式详解
Feb 11 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
Mar 01 Javascript
JavaScript实现多栏目切换效果
Dec 12 Javascript
微信小程序动态显示项目倒计时效果
Jun 13 Javascript
vue2.0 下拉框默认标题设置方法
Aug 22 Javascript
简单了解微信小程序的目录结构
Jul 01 Javascript
JavaScript面向对象核心知识与概念归纳整理
May 09 Javascript
javascript实现一款好看的秒表计时器
Sep 05 Javascript
React更新渲染原理深入分析
Dec 24 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
destoon利用Rewrite规则设置网站安全
2014/06/21 PHP
CodeIgniter中实现泛域名解析
2014/07/19 PHP
初识PHP中的Swoole
2016/04/05 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
2016/06/13 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
2017/05/05 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
2018/04/21 PHP
ajax 缓存 问题 requestheader
2010/08/01 Javascript
基于dom编程中 动态创建与删除元素的使用
2013/04/17 Javascript
jquery对元素拖动排序示例
2014/01/16 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
2014/06/09 Javascript
JavaScript获取function所有参数名的方法
2015/10/30 Javascript
JavaScript预解析及相关技巧分析
2016/04/21 Javascript
node.js cookie-parser之parser.js
2016/06/06 Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
2017/02/04 Javascript
详解升级react-router 4 踩坑指南
2017/08/14 Javascript
BootStrap下的弹出框加载select2框架失败的解决方法
2017/08/31 Javascript
vue中实现滚动加载更多的示例
2017/11/08 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
2018/11/16 Javascript
微信小程序人脸识别功能代码实例
2019/05/07 Javascript
[56:35]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第二局
2016/02/27 DOTA
跟老齐学Python之模块的加载
2014/10/24 Python
Python虚拟环境Virtualenv使用教程
2015/05/18 Python
python3.x实现发送邮件功能
2018/05/22 Python
Python实现查找字符串数组最长公共前缀示例
2019/03/27 Python
Django ImageFiled上传照片并显示的方法
2019/07/28 Python
python Kmeans算法原理深入解析
2019/08/23 Python
Pytorch实现的手写数字mnist识别功能完整示例
2019/12/13 Python
python连接手机自动搜集蚂蚁森林能量的实现代码
2021/02/24 Python
利用CSS的Sass预处理器(框架)来制作居中效果
2016/03/10 HTML / CSS
以设计师精品品质提供快速时尚:Mostata
2019/05/10 全球购物
盖尔斯工厂店:GUESS Factory
2020/01/21 全球购物
小学数学教研活动总结
2014/07/01 职场文书
四川省传达学习贯彻党的群众路线教育实践活动总结大会精神新闻稿
2014/10/26 职场文书
担保贷款承诺书
2015/04/30 职场文书
《刺客之王:C罗全景传记》:时代从来不会亏待手艺人
2019/11/28 职场文书