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 相关文章推荐
jquery 常用操作方法
Jan 28 Javascript
常用的JavaScript验证正则表达式汇总
Nov 26 Javascript
js身份证判断方法支持15位和18位
Mar 18 Javascript
JS获取URL中参数值(QueryString)的4种方法分享
Apr 12 Javascript
js控制容器隐藏出现防止样式变化的两种方法
Apr 25 Javascript
js实现文字在按钮上滚动的方法
Aug 20 Javascript
原生JS实现图片轮播与淡入效果的简单实例
Aug 21 Javascript
Bootstrap CSS使用方法
Dec 23 Javascript
vue router路由嵌套不显示问题的解决方法
Jun 17 Javascript
javaScript中的空值和假值
Dec 18 Javascript
React组件中的this的具体使用
Feb 28 Javascript
js实现微信聊天效果
Aug 09 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编实现程动态图像的创建代码
2008/09/28 PHP
基于xcache的配置与使用详解
2013/06/18 PHP
PHP curl 抓取AJAX异步内容示例
2014/09/09 PHP
thinkphp缓存技术详解
2014/12/09 PHP
jQuery图片的展开和收缩实现代码
2013/04/16 Javascript
超炫的jquery仿flash导航栏特效
2014/11/11 Javascript
JavaScript中的ArrayBuffer详细介绍
2014/12/08 Javascript
Jquery中基本选择器用法实例详解
2015/05/18 Javascript
Javascript 字符串模板的简单实现
2016/02/13 Javascript
JavaScript的函数式编程基础指南
2016/03/19 Javascript
javascript获取网页各种高宽及位置的方法总结
2016/07/27 Javascript
手机端图片缩放旋转全屏查看PhotoSwipe.js插件实现
2016/08/25 Javascript
jQuery实现checkbox列表的全选、反选功能
2016/11/24 Javascript
Javascript ES6中对象类型Sets的介绍与使用详解
2017/07/17 Javascript
JS函数节流和函数防抖问题分析
2017/12/18 Javascript
JavaScript实现的前端AES加密解密功能【基于CryptoJS】
2018/08/28 Javascript
如何为vuex实现带参数的 getter和state.commit
2019/01/04 Javascript
DatePickerDialog 自定义样式及使用全解
2019/07/09 Javascript
jQuery Datatables 动态列+跨列合并实现代码
2020/01/30 jQuery
JS如何实现封装列表右滑动删除收藏按钮
2020/07/23 Javascript
使用Python操作MySQL的一些基本方法
2015/08/16 Python
python opencv之SIFT算法示例
2018/02/24 Python
Python处理命令行参数模块optpars用法实例分析
2018/05/31 Python
Python Web框架之Django框架Model基础详解
2019/08/16 Python
Python中求对数方法总结
2020/03/10 Python
Python之Matplotlib文字与注释的使用方法
2020/06/18 Python
Python二元算术运算常用方法解析
2020/09/15 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
英国珠宝网站Argento: PANDORA、Olivia Burton和Nomination等
2020/05/08 全球购物
网络、C以及其他硬件方面的面试题
2016/08/23 面试题
条幅标语大全
2014/06/20 职场文书
意向书范本
2014/07/29 职场文书
婚前协议书标准版
2014/10/19 职场文书
中国合伙人观后感
2015/06/02 职场文书
详解Python常用的魔法方法
2021/06/03 Python
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python