AngularJS初始化静态模板详解


Posted in Javascript onJanuary 14, 2016

AngularJS可以通过ng-app来自动初始化模块,也可以通过angular.bootstrap(document, [module])手动启动应用,不管用哪种方法,应用启动后,动态往dom树里面添加的dom元素,无法执行angular指令,即无法通过ng-model、ng-click给动态添加的dom元素绑定数据和事件,怎么办?

动态添加dom元素的场景非常常见,如点击某页面上修改用户资料的按钮,发送ajax请求去查询用户资料,然后通过模板引擎将事先写在页面里的静态模板编译成HTML字符串,最后将HTML字符串append到页面显示出来,一般情况下我们会这样做:

<!DOCTYPE html>
<html ng-app="app">
<head>
  <title>demo</title>
  <meta charset="utf-8"/>
  <script src="http://cdn.bootcss.com/jquery/3.0.0-alpha1/jquery.min.js"></script>
  <script id="others_angular_103" type="text/javascript" class="library" src="http://sandbox.runjs.cn/js/sandbox/other/angular.min.js"></script>
  <style>
    .contani{
      width: 100%;
      height: 300px;
      border: 1px solid red;
    }
  </style>
</head>
<body ng-controller="myCtrl">
<script>
  var app = angular.module('app',[]);
  app.controller('myCtrl', ['$scope','$compile',function(scope,$compile){
    scope.valchange = function(){
      console.log('value change')
    }
    scope.edit = function(){
      //假设这是ajax返回的数据
      scope.username = 'wangmeijian';
      scope.password = '000000';
      $(".contani").html(myTmpl.innerHTML);
    }
  }])
</script>
<button ng-click="edit()">修改资料</button>
<div class="contani"></div>
<script type="text/html" id="myTmpl">
  <form>
    用户名:<input type="text" ng-model="username" />
    密码:<input type="text" ng-model="password" />
  </form>
</script>
</body>
</html>

点击修改资料按钮,新插入的dom元素并没有绑定ajax返回的数据,这是因为点击按钮前angular已经初始化完毕了,解决办法当然不是再初始化一次,而是单独使用$compile编译静态模板的HTML,然后再插入dom树中

<!DOCTYPE html>
<html ng-app="app">
<head>
  <title>demo</title>
  <meta charset="utf-8"/>
  <script src="http://cdn.bootcss.com/jquery/3.0.0-alpha1/jquery.min.js"></script>
  <script id="others_angular_103" type="text/javascript" class="library" src="http://sandbox.runjs.cn/js/sandbox/other/angular.min.js"></script>
  <style>
    .contani{
      width: 100%;
      height: 300px;
      border: 1px solid red;
    }
  </style>
</head>
<body ng-controller="myCtrl">
<script>
  var app = angular.module('app',[]);
  app.controller('myCtrl', ['$scope','$compile',function(scope,$compile){
    scope.valchange = function(){
      console.log('value change')
    }
    scope.edit = function(){
      //假设这是ajax返回的数据
      scope.username = 'wangmeijian';
      scope.password = '000000';
      //$(".contani").html(myTmpl.innerHTML);
      $(".contani").append( $compile(myTmpl.innerHTML)(scope) )
    }
  }])
</script>
<button ng-click="edit()">修改资料</button>
<div class="contani"></div>
<script type="text/html" id="myTmpl">
  <form>
    用户名:<input type="text" ng-model="username" ng-change="valchange()" />
    密码:<input type="text" ng-model="password" ng-change="valchange()" />
  </form>
</script>
</body>
</html>

以上就是关于AngularJS初始化静态模板的详细介绍,希望对大家的学习有所帮助。

Javascript 相关文章推荐
Javascript SHA-1:Secure Hash Algorithm
Dec 20 Javascript
Javascript事件热键兼容ie|firefox
Dec 30 Javascript
JS中的数组的sort方法使用示例
Jan 22 Javascript
js数值和和字符串进行转换时可以对不同进制进行操作
Mar 05 Javascript
自己动手手写jQuery插件总结
Jan 20 Javascript
在JavaScript中处理时间之setMinutes()方法的使用
Jun 11 Javascript
原生js封装二级城市下拉列表的实现代码
Jun 16 Javascript
JavaScript兼容性总结之获取非行间样式案例
Aug 07 Javascript
element ui table 增加筛选的方法示例
Nov 02 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
Aug 08 Javascript
如何通过Proxy实现JSBridge模块化封装
Oct 22 Javascript
解决Antd Table组件表头不对齐的问题
Oct 27 Javascript
基于jQuery实现文本框只能输入数字(小数、整数)
Jan 14 #Javascript
jquery拖拽效果完整实例(附demo源码下载)
Jan 14 #Javascript
基于javascript实现随机颜色变化效果
Jan 14 #Javascript
JavaScript事件类型中UI事件详解
Jan 14 #Javascript
JavaScript事件 &quot;事件对象&quot;的注意要点
Jan 14 #Javascript
详解JavaScript中localStorage使用要点
Jan 13 #Javascript
javascript图片切换综合实例(循环切换、顺序切换)
Jan 13 #Javascript
You might like
自定义php类(查找/修改)xml文档
2013/03/26 PHP
Thinkphp调用Image类生成缩略图的方法
2015/03/07 PHP
php简单图像创建入门实例
2015/06/10 PHP
PHP使用PHPExcel删除Excel单元格指定列的方法
2016/07/06 PHP
基于jquery的inputlimiter 实现字数限制功能
2010/05/30 Javascript
关于Javascript模块化和命名空间管理的问题说明
2010/12/06 Javascript
html文档中的location对象属性理解及常见的用法
2014/08/13 Javascript
node.js中的fs.fsyncSync方法使用说明
2014/12/15 Javascript
浅析JavaScript中的变量复制、参数传递和作用域链
2016/01/13 Javascript
jQuery基于扩展实现的倒计时效果
2016/05/14 Javascript
jquery对象和DOM对象的相互转换详解
2016/10/18 Javascript
react 实现页面代码分割、按需加载的方法
2018/04/03 Javascript
javascript关于“时间”的一次探索
2019/07/24 Javascript
WEB前端性能优化的7大手段详解
2020/02/04 Javascript
jQuery 淡入/淡出效果函数用法分析
2020/05/19 jQuery
Python使用稀疏矩阵节省内存实例
2014/06/27 Python
python中使用urllib2伪造HTTP报头的2个方法
2014/07/07 Python
Python列表append和+的区别浅析
2015/02/02 Python
Python列表切片用法示例
2017/04/19 Python
教你用一行Python代码实现并行任务(附代码)
2018/02/02 Python
火车票抢票python代码公开揭秘!
2018/03/08 Python
Python os.access()用法实例
2019/02/18 Python
django中使用Celery 布式任务队列过程详解
2019/07/29 Python
python中树与树的表示知识点总结
2019/09/14 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
pytorch 获取tensor维度信息示例
2020/01/03 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
CSS3 网页下拉菜单代码解释 中文翻译
2010/02/27 HTML / CSS
CSS3 box-sizing属性详解
2016/11/15 HTML / CSS
西班牙美妆电商:Perfume’s Club(有中文站)
2018/08/08 全球购物
军训心得体会
2013/12/31 职场文书
服务员岗位职责
2014/01/29 职场文书
八项规定个人对照检查材料思想汇报
2014/09/25 职场文书
教师党员个人剖析材料
2014/09/29 职场文书
主持人开幕词
2015/01/29 职场文书
eval(cmd)与eval($cmd)的区别与联系
2021/07/07 PHP