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 相关文章推荐
IE本地存储userdata的一个bug说明
Jul 01 Javascript
javascript删除一个html元素节点的方法
Dec 20 Javascript
使用AJAX实现Web页面进度条的实例分享
May 06 Javascript
JSP基于Bootstrap分页显示实例解析
Jun 12 Javascript
Vue.js每天必学之过滤器与自定义过滤器
Sep 07 Javascript
bootstrap flask登录页面编写实例
Nov 01 Javascript
Bootstrap布局之栅格系统学习笔记
May 04 Javascript
Vuex和前端缓存的整合策略详解
May 09 Javascript
jQuery validata插件实现方法
Jun 25 jQuery
JS常见构造模式实例对比分析
Aug 27 Javascript
js 对象使用的小技巧实例分析
Nov 08 Javascript
JS中forEach()、map()、every()、some()和filter()的用法
May 11 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 header 跳转
2013/06/17 PHP
php preg_replace替换实例讲解
2013/11/04 PHP
PHP编程风格规范分享
2014/01/15 PHP
php实现倒计时效果
2015/12/19 PHP
php实现页面纯静态的实例代码
2017/06/21 PHP
背景图跟随鼠标移动的Mootools插件实现代码
2011/12/12 Javascript
JS字符串累加Array不一定比字符串累加快(根据电脑配置)
2012/05/14 Javascript
jquery创建一个ajax关键词数据搜索实现思路
2013/02/26 Javascript
使用jquery解析XML示例代码
2014/09/05 Javascript
JQuery select(下拉框)操作方法汇总
2015/04/15 Javascript
全面接触神奇的Bootstrap导航条实战篇
2016/08/01 Javascript
利用JavaScript阻止表单提交的两种方法
2016/08/11 Javascript
JS实现图片上传预览功能
2016/11/21 Javascript
js实现小窗口拖拽效果
2016/12/03 Javascript
D3.js中强制异步文件读取同步的几种方法
2017/02/06 Javascript
基于Vue2.0+ElementUI实现表格翻页功能
2017/10/23 Javascript
JavaScript实现计算多边形质心的方法示例
2018/01/31 Javascript
微信小程序渲染性能调优小结
2019/07/30 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
Postman动态获取返回值过程详解
2020/06/30 Javascript
python应用程序在windows下不出现cmd窗口的办法
2014/05/29 Python
浅谈Python中copy()方法的使用
2015/05/21 Python
解决Pycharm后台indexing导致不能run的问题
2019/06/27 Python
tensorflow求导和梯度计算实例
2020/01/23 Python
python中wx模块的具体使用方法
2020/05/15 Python
Pytorch 图像变换函数集合小结
2021/02/01 Python
使用CSS3实现input多选框自定义样式的方法示例
2019/07/19 HTML / CSS
全球最大最受欢迎的旅游社区:Tripadvisor
2017/11/03 全球购物
英国第一的市场和亚马逊替代品:OnBuy
2019/03/16 全球购物
小米官方旗舰店:Xiaomi
2020/08/07 全球购物
在校生汽车维修实习自我鉴定
2013/09/19 职场文书
大学生个人求职口试自我评价
2014/02/16 职场文书
公司年会搞笑主持词
2014/03/24 职场文书
公司请假条格式
2014/04/11 职场文书
2015年国庆放假通知范文
2015/08/18 职场文书
幼儿园教师辞职信
2019/06/21 职场文书