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 相关文章推荐
List Installed Hot Fixes
Jun 12 Javascript
javascript下function声明一些小结
Dec 28 Javascript
获得所有表单值的JQuery实现代码[IE暂不支持]
May 24 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
Apr 12 Javascript
js中class的点击事件没有效果的解决方法
Oct 13 Javascript
jQuery手风琴的简单制作
May 12 jQuery
ES6模块化的import和export用法方法总结
Aug 08 Javascript
Mui使用jquery并且使用点击跳转新窗口的实例
Aug 19 jQuery
详解A标签中href=&quot;&quot;的几种用法
Aug 20 Javascript
简单说说如何使用vue-router插件的方法
Apr 08 Javascript
Vue自定义组件双向绑定实现原理及方法详解
Sep 03 Javascript
Chrome插件开发系列一:弹窗终结者开发实战
Oct 02 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
索尼SONY ICF-7600A(W)电路分析
2021/03/01 无线电
dede3.1分页文字采集过滤规则详说(图文教程)续四
2007/04/03 PHP
php URL验证正则表达式
2011/07/19 PHP
php 字符串替换的方法
2012/01/10 PHP
PHP给文字内容中的关键字进行套红处理
2016/04/12 PHP
可以将word转成html的js代码
2010/04/11 Javascript
passwordStrength 基于jquery的密码强度检测代码使用介绍
2011/10/08 Javascript
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
2013/07/09 Javascript
js给onclick赋值传参数的两种方法
2013/11/25 Javascript
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
使用js判断控件是否获得焦点
2014/01/03 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
2015/03/11 Javascript
VueJs路由跳转——vue-router的使用详解
2017/01/10 Javascript
移动端点击态处理的三种实现方式
2017/01/12 Javascript
基于jQuery实现的打字机效果
2017/01/16 Javascript
原生JS实现图片懒加载(lazyload)实例
2017/06/13 Javascript
详解Vue.js之视图和数据的双向绑定(v-model)
2017/06/23 Javascript
在vue中动态添加class类进行显示隐藏实例
2019/11/09 Javascript
Jquery使用each函数实现遍历及数组处理
2020/07/14 jQuery
js实现3D旋转效果
2020/08/18 Javascript
JavaScript arguments.callee作用及替换方案详解
2020/09/02 Javascript
Python函数可变参数定义及其参数传递方式实例详解
2015/05/25 Python
python如何派生内置不可变类型并修改实例化行为
2018/03/21 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
2019/02/16 Python
Python流行ORM框架sqlalchemy安装与使用教程
2019/06/04 Python
Python-for循环的内部机制
2020/06/12 Python
Python包和模块的分发详细介绍
2020/06/19 Python
python 调用API接口 获取和解析 Json数据
2020/09/28 Python
css3实现背景动态渐变效果
2019/12/10 HTML / CSS
让IE支持HTML5的方法
2012/12/11 HTML / CSS
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
HTML5超文本标记语言的实现方法
2020/09/24 HTML / CSS
美国大城市最热门旅游景点门票:CityPASS
2016/12/16 全球购物
教师旷工检讨书
2014/01/18 职场文书
安全检查管理制度
2014/02/02 职场文书
《巨人的花园》教学反思
2016/02/19 职场文书