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继承的实现
Oct 24 Javascript
jsPDF导出pdf示例
May 02 Javascript
JS实现让网页背景图片斜向移动的方法
Feb 25 Javascript
JS实现简易图片轮播效果的方法
Mar 25 Javascript
jQuery文字横向滚动效果的实现代码
May 31 Javascript
关于Function中的bind()示例详解
Dec 02 Javascript
javascript使用递归算法求两个数字组合功能示例
Jan 03 Javascript
JQuery判断正整数整理小结
Aug 21 jQuery
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
Sep 17 Javascript
如何利用node转发请求详解
Sep 17 Javascript
vue项目实现多语言切换的思路
Sep 17 Javascript
微信小程序canvas动态时钟
Oct 22 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下判断数组中是否存在相同的值array_unique
2008/03/25 PHP
php中cookie的作用域
2008/03/27 PHP
强烈声明: 不要使用(include/require)_once
2013/06/06 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
2013/08/01 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
THinkPHP获取客户端IP与IP地址查询的方法
2016/11/14 PHP
Javascript Object 对象学习笔记
2014/12/17 Javascript
解决node-webkit 不支持html5播放mp4视频的方法
2015/03/11 Javascript
Webpack 实现 Node.js 代码热替换
2015/10/22 Javascript
JavaScript获取对象在页面中位置坐标的方法
2016/02/03 Javascript
AngularJS 入门教程之事件处理器详解
2016/08/19 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
前端常见跨域解决方案(全)
2017/09/19 Javascript
vue.js2.0点击获取自己的属性和jquery方法
2018/02/23 jQuery
使用vue-aplayer插件时出现的问题的解决
2018/03/02 Javascript
结合Vue控制字符和字节的显示个数的示例
2018/05/17 Javascript
Vue实现用户自定义字段显示数据的方法
2018/08/28 Javascript
nodejs中用npm初始化来创建package.json的实例讲解
2018/10/10 NodeJs
微信小程序实现购物页面左右联动
2019/02/15 Javascript
vue-cli 项目打包完成后运行文件路径报错问题
2019/07/19 Javascript
vue仿ios列表左划删除
2019/09/26 Javascript
Python文件操作基本流程代码实例
2017/12/11 Python
python3使用flask编写注册post接口的方法
2018/12/28 Python
pycharm修改file type方式
2019/11/19 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
前端实现背景虚化但内容清晰且自适应 的实例代码
2019/08/01 HTML / CSS
德国EGOIST网店:销售畅销的设计师品牌
2017/04/18 全球购物
奥地利体育网上商店:Gigasport
2019/10/09 全球购物
nohup的用法
2012/11/26 面试题
工商技校毕业生自荐信
2013/11/15 职场文书
施工资料员岗位职责
2014/01/06 职场文书
行政部工作岗位职责范本
2014/03/05 职场文书
纪念一二九运动演讲稿
2014/09/16 职场文书
全国爱眼日活动总结
2015/02/27 职场文书
感恩教育观后感
2015/06/17 职场文书
《中华上下五千年》读后感3篇
2019/11/29 职场文书