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实现iframe动态调整高度的代码
Jan 06 Javascript
Javascript 闭包引起的IE内存泄露分析
May 23 Javascript
jquery高效反选具体实现
May 05 Javascript
一个简单的动态加载js和css的jquery代码
Sep 01 Javascript
javascript编写贪吃蛇游戏
Jul 07 Javascript
几句话带你理解JS中的this、闭包、原型链
Sep 26 Javascript
详解Vue 方法与事件处理器
Jun 20 Javascript
Vue全家桶实践项目总结(推荐)
Nov 04 Javascript
vue设置导航栏、侧边栏为公共页面的例子
Nov 01 Javascript
Vue-cli3多页面配置详解
Mar 22 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
Apr 27 Javascript
vue组件添加事件@click.native操作
Oct 30 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一些十分严重的缺陷详解
2013/06/03 PHP
PHP使用正则表达式清除超链接文本
2013/11/12 PHP
CodeIgniter框架数据库事务处理的设计缺陷和解决方案
2014/07/25 PHP
Some tips of wmi scripting in jscript (1)
2007/04/03 Javascript
用javascript实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
2007/04/20 Javascript
解析Javascript中中括号“[]”的多义性
2013/12/03 Javascript
JavaScript Serializer序列化时间处理示例
2014/07/31 Javascript
详解Node.js中的事件机制
2016/09/22 Javascript
微信小程序实战之运维小项目
2017/01/17 Javascript
JS实现的贪吃蛇游戏完整实例
2019/01/18 Javascript
ES6中Set和Map数据结构,Map与其它数据结构互相转换操作实例详解
2019/02/28 Javascript
vue+elementUI动态生成面包屑导航教程
2019/11/04 Javascript
JS如何实现网站中PC端和手机端自动识别并跳转对应的代码
2020/01/08 Javascript
使用Vant完成DatetimePicker 日期的选择器操作
2020/11/12 Javascript
[06:36]吞吞映像top1
2014/06/20 DOTA
[52:41]OG vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/20 DOTA
Django实现组合搜索的方法示例
2018/01/23 Python
将TensorFlow的模型网络导出为单个文件的方法
2018/04/23 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
Django框架的中的setting.py文件说明详解
2018/10/15 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
python解释器spython使用及原理解析
2019/08/24 Python
Python 使用office365邮箱的示例
2020/10/29 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
2020/11/28 Python
稀有和绝版书籍:Biblio.com
2017/02/02 全球购物
意大利拉斐尔时尚购物网:Raffaello Network(支持中文)
2018/11/09 全球购物
Nisbets爱尔兰:英国最大的厨房和餐饮设备供应商
2019/01/26 全球购物
ShellScript面试题一则-ShellScript编程
2014/03/05 面试题
开办加工厂创业计划书
2014/01/03 职场文书
企业军训感言
2014/02/08 职场文书
品牌宣传方案
2014/03/21 职场文书
2016企业先进集体事迹材料
2016/02/25 职场文书
导游词之铁岭象牙山
2019/12/06 职场文书
python3中apply函数和lambda函数的使用详解
2022/02/28 Python
SQL Server中常用截取字符串函数介绍
2022/03/16 SQL Server
MySQL数据库 任意ip连接方法
2022/05/20 MySQL