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 相关文章推荐
jQuery 性能优化指南 (1)
May 21 Javascript
Javascript倒计时代码
Aug 12 Javascript
用jquery实现自定义风格的滑动条实现代码
Apr 26 Javascript
基于jquery的固定表头和列头的代码
May 03 Javascript
js 验证身份证信息有效性
Mar 28 Javascript
Jquery对新插入的节点 绑定Click事件失效的解决方法
Jun 02 Javascript
详解vue前后台数据交互vue-resource文档
Jul 19 Javascript
Angularjs按需查询实例代码
Oct 30 Javascript
Node.js Buffer用法解读
May 18 Javascript
vue前端框架—Mint UI详解(更适用于移动端)
Apr 30 Javascript
微信小程序 搜索框组件代码实例
Sep 06 Javascript
JS实现简易留言板增删功能
Feb 08 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
PHP 解决session死锁的方法
2013/06/20 PHP
PHP curl CURLOPT_RETURNTRANSFER参数的作用使用实例
2015/02/07 PHP
php实现将任意进制数转换成10进制的方法
2015/04/17 PHP
详解php中生成标准uuid(guid)的方法
2019/04/28 PHP
ThinkPHP5&amp;5.1实现验证码的生成、使用及点击刷新功能示例
2020/02/07 PHP
js关闭父窗口时关闭子窗口
2013/04/01 Javascript
node.js中的fs.openSync方法使用说明
2014/12/17 Javascript
javascript验证邮件地址和MX记录的方法
2015/06/16 Javascript
JS实现先显示大图后自动收起显示小图的广告代码
2015/09/04 Javascript
jquery实现简洁文件上传表单样式
2015/11/02 Javascript
javascript闭包(Closure)用法实例简析
2015/11/30 Javascript
实用又漂亮的BootstrapValidator表单验证插件
2016/05/30 Javascript
jquery实现全选、全不选以及单选功能
2017/03/23 jQuery
jQuery Ajax向服务端传递数组参数值的实例代码
2017/09/03 jQuery
基于Fixed定位的框选功能的实现代码
2019/05/13 Javascript
详解element-ui设置下拉选择切换必填和非必填
2019/06/17 Javascript
vue-cli3项目升级到vue-cli4 的方法总结
2020/03/19 Javascript
javascript-hashchange事件和历史状态管理实例分析
2020/04/18 Javascript
html-webpack-plugin修改页面的title的方法
2020/06/18 Javascript
手把手教你实现 Promise的使用方法
2020/09/02 Javascript
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
python 实现敏感词过滤的方法
2019/01/21 Python
python绘制地震散点图
2019/06/18 Python
在OpenCV里使用特征匹配和单映射变换的代码详解
2019/10/23 Python
屏蔽Django admin界面添加按钮的操作
2020/03/11 Python
python调用百度API实现人脸识别
2020/11/17 Python
css3实例教程 一款纯css3实现的环形导航菜单
2014/10/20 HTML / CSS
Spartoo芬兰:欧洲最大的网上鞋店
2016/08/28 全球购物
公司新年寄语
2014/04/04 职场文书
解除劳动合同协议书范本
2014/04/14 职场文书
《她是我的朋友》教学反思
2014/04/26 职场文书
学校三节实施方案
2014/06/09 职场文书
学用政策心得体会
2014/09/10 职场文书
《女娲补天》教学反思
2016/02/20 职场文书
MySQL千万级数据表的优化实战记录
2021/08/04 MySQL
SQL语法CONSTRAINT约束操作详情
2022/01/18 MySQL