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下arguments,caller,callee,call,apply示例及理解
Dec 24 Javascript
早该知道的7个JavaScript技巧
Mar 27 Javascript
js+html5实现canvas绘制圆形图案的方法
Jun 05 Javascript
javascript实现超炫的向上滑行菜单实例
Aug 03 Javascript
Bootstrap Modal遮罩弹出层(完整版)
Nov 21 Javascript
JavaScript利用闭包实现模块化
Jan 13 Javascript
vue2导航根据路由传值,而改变导航内容的实例
Nov 10 Javascript
实例分析js事件循环机制
Dec 13 Javascript
基于javascript 显式转换与隐式转换(详解)
Dec 15 Javascript
js实现unicode码字符串与utf8字节数据互转详解
Mar 21 Javascript
JS中实现一个下载进度条及播放进度条的代码
Jun 10 Javascript
Vue快速实现通用表单验证的方法
Feb 24 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
这部番真是良心,画质好到像风景区,剧情让人跟着小公会热血沸腾
2020/03/10 日漫
怎么在Windows系统中搭建php环境
2013/08/31 PHP
js二维数组定义和初始化的三种方法总结
2014/03/03 Javascript
jQuery选择器之基本选择器与层次选择器
2015/03/03 Javascript
JS遍历页面所有对象属性及实现方法
2016/08/01 Javascript
微信小程序使用第三方库Immutable.js实例详解
2016/09/27 Javascript
Vue.js基础学习之class与样式绑定
2017/03/20 Javascript
slideToggle+slideup实现手机端折叠菜单效果
2017/05/25 Javascript
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
2017/09/14 Javascript
vue 标签属性数据绑定和拼接的实现方法
2018/05/17 Javascript
vue实现学生录入系统之添加删除功能
2018/07/11 Javascript
vue指令做滚动加载和监听等
2019/05/26 Javascript
你不可不知的Vue.js列表渲染详解
2019/10/01 Javascript
在vue中实现禁止回退上一步,路由不存历史记录
2020/07/22 Javascript
python创建和删除目录的方法
2015/04/29 Python
Python 获得13位unix时间戳的方法
2017/10/20 Python
Django中的ajax请求
2018/10/19 Python
python函数与方法的区别总结
2019/06/23 Python
jenkins配置python脚本定时任务过程图解
2019/10/29 Python
python如何实现不可变字典inmutabledict
2020/01/08 Python
基于opencv的selenium滑动验证码的实现
2020/07/24 Python
numpy中生成随机数的几种常用函数(小结)
2020/08/18 Python
python 使用cycle构造无限循环迭代器
2020/12/02 Python
CSS3近阶段篇之酷炫的3D旋转透视
2016/04/28 HTML / CSS
实例讲解利用HTML5 Canvas API操作图形旋转的方法
2016/03/22 HTML / CSS
Giglio英国站:意大利奢侈品购物网
2018/03/06 全球购物
洛杉矶健身中心女性专用运动服饰品牌:Marika
2018/05/09 全球购物
印度化妆品购物网站:Nykaa
2018/07/22 全球购物
Java程序员面试90题
2013/10/19 面试题
工程师岗位职责
2013/11/08 职场文书
积极分子思想汇报
2014/01/04 职场文书
演讲稿开场白
2014/01/13 职场文书
2015年党支部公开承诺书
2015/01/22 职场文书
小学生反邪教心得体会
2016/01/15 职场文书
使用python创建股票的时间序列可视化分析
2022/03/03 Python
《LOL》“克隆大作战”久违归来 幻灵战队皮肤上线
2022/04/03 其他游戏