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 相关文章推荐
js变量作用域及可访问性的探讨
Nov 23 Javascript
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
Dec 06 Javascript
jQuery查询数据返回object和字符串影响原因是什么
Aug 09 Javascript
js之事件冒泡和事件捕获详细介绍
Oct 28 Javascript
浅谈JavaScript 框架分类
Nov 10 Javascript
浅析javascript的间隔调用和延时调用
Nov 12 Javascript
javascript学习笔记之函数定义
Jun 25 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
Sep 28 Javascript
基于jQuery 实现bootstrapValidator下的全局验证
Dec 07 Javascript
hovertree插件实现二级树形菜单(简单实用)
Dec 28 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
May 28 Javascript
Vue vm.$attrs使用场景详解
Mar 08 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
JavaScript实现滚动栏效果的方法
2015/04/27 PHP
PHP版本如何选择?应该使用哪个版本?
2015/05/13 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
PHP实现的杨辉三角求解算法分析
2019/03/11 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
JavaScript mapreduce工作原理简析
2012/11/25 Javascript
jQuery向后台传入json格式数据的方法
2015/02/13 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
深入理解jquery中extend的实现
2016/12/22 Javascript
全面介绍vue 全家桶和项目实例
2017/12/27 Javascript
vue底部加载更多的实例代码
2018/06/29 Javascript
不得不知的ES6小技巧
2018/07/28 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
2019/05/13 Javascript
JavaScript使用百度ECharts插件绘制饼图操作示例
2019/11/26 Javascript
在vue中使用axios实现post方式获取二进制流下载文件(实例代码)
2019/12/16 Javascript
Node.js API详解之 vm模块用法实例分析
2020/05/27 Javascript
element-ui点击查看大图的方法示例
2020/12/14 Javascript
[01:31](回顾)杀出重围,决战TI之巅
2014/07/01 DOTA
使用Python监控文件内容变化代码实例
2018/06/04 Python
Python中整数的缓存机制讲解
2019/02/16 Python
Python字典遍历操作实例小结
2019/03/05 Python
Python实现直方图均衡基本原理解析
2019/08/08 Python
Python Json数据文件操作原理解析
2020/05/09 Python
Python SMTP配置参数并发送邮件
2020/06/16 Python
使用Python爬取小姐姐图片(beautifulsoup法)
2021/02/11 Python
莫斯科的韩国化妆品店:Sifo
2019/12/04 全球购物
即兴演讲稿
2014/01/04 职场文书
内刊编辑求职自荐书范文
2014/02/19 职场文书
医药营销个人求职信
2014/04/12 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
2015年煤矿安全工作总结
2015/05/23 职场文书
甲午风云观后感
2015/06/02 职场文书
八年级物理教学反思
2016/02/19 职场文书
微信小程序结合ThinkPHP5授权登陆后获取手机号
2021/11/23 PHP
Go归并排序算法的实现方法
2022/04/06 Golang
Tomcat执行startup.bat出现闪退的原因及解决办法
2022/04/20 Servers