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事件实现代码
Mar 12 Javascript
为EasyUI的Tab标签添加右键菜单的方法
Jul 14 Javascript
分享一个自己写的简单的javascript分页组件
Feb 15 Javascript
简易的投票系统以及js刷票思路和方法
Apr 07 Javascript
JavaScript中关于class的调用方法
Nov 28 Javascript
vue解决弹出蒙层滑动穿透问题的方法
Sep 22 Javascript
详解vuejs2.0 select 动态绑定下拉框支持多选
Apr 25 Javascript
laypage+SpringMVC实现后端分页
Jul 27 Javascript
vue 解决移动端弹出键盘导致页面fixed布局错乱的问题
Nov 06 Javascript
ES6如何用一句代码实现函数的柯里化
Jan 18 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
Jul 15 Javascript
vue制作toast组件npm包示例代码
Oct 29 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获取当前url的具体方法全面解析
2013/11/26 PHP
php function用法如何递归及return和echo区别
2014/03/07 PHP
php生成4位数字验证码的实现代码
2015/11/23 PHP
ecshop适应在PHP7的修改方法解决报错的实现
2016/11/01 PHP
yii框架数据库关联查询操作示例
2019/10/14 PHP
20款超赞的jQuery插件 Web开发人员必备
2011/02/26 Javascript
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
2013/07/09 Javascript
用innerhtml提高页面打开速度的方法
2013/08/02 Javascript
在Firefox下js select标签点击无法弹出
2014/03/06 Javascript
使用JavaScript获取地址栏参数的方法
2014/12/19 Javascript
使用jQuery实现input数值增量和减量的方法
2015/01/24 Javascript
jQuery leonaScroll 1.1 自定义滚动条插件(推荐)
2016/09/17 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
2017/12/22 Javascript
JavaScript实现微信号随机切换代码
2018/03/09 Javascript
Vue SPA单页应用首屏优化实践
2018/06/28 Javascript
vue基础之data存储数据及v-for循环用法示例
2019/03/08 Javascript
JS实现图片轮播效果实例详解【可自动和手动】
2019/04/04 Javascript
jQuery事件委托代码实践详解
2019/06/21 jQuery
Vue  webpack 项目自动打包压缩成zip文件的方法
2019/07/24 Javascript
小程序实现投票进度条
2019/11/20 Javascript
利用JS判断元素是否为数组的方法示例
2021/01/08 Javascript
vue实现禁止浏览器记住密码功能的示例代码
2021/02/03 Vue.js
Python的Django应用程序解决AJAX跨域访问问题的方法
2016/05/31 Python
Python+tkinter使用80行代码实现一个计算器实例
2018/01/16 Python
解决安装pycharm后不能执行python脚本的问题
2019/01/19 Python
Python并发:多线程与多进程的详解
2019/01/24 Python
django重新生成数据库中的某张表方法
2019/08/28 Python
Python 如何展开嵌套的序列
2020/08/01 Python
利用Python实现Json序列化库的方法步骤
2020/09/09 Python
python爬虫分布式获取数据的实例方法
2020/11/26 Python
医学专业五年以上个人求职信
2013/12/03 职场文书
中医专业职业生涯规划书范文
2014/01/04 职场文书
财务部岗位职责
2015/02/03 职场文书
2015年党建工作目标责任书
2015/05/08 职场文书
2016年“抗战胜利纪念日”71周年校园广播稿
2015/12/18 职场文书
Python中使用ipython的详细教程
2021/06/22 Python