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命令汇总,方便使用jquery的朋友
Jun 26 Javascript
jQuery Mobile的loading对话框显示/隐藏方法分享
Nov 26 Javascript
EasyUI中combobox默认值注意事项
Mar 01 Javascript
jQuery实现的支持IE的html滑动条
Mar 16 Javascript
用js编写的简单的计算器代码程序
Aug 04 Javascript
JavaScript插件Tab选项卡效果
Nov 14 Javascript
在knockoutjs 上自己实现的flux(实例讲解)
Dec 18 Javascript
vue实现与安卓、IOS交互的方法
Nov 02 Javascript
EasyUI 数据表格datagrid列自适应内容宽度的实现
Jul 18 Javascript
js HTML DOM EventListener功能与用法实例分析
Apr 27 Javascript
vue 导出文件,携带请求头token操作
Sep 10 Javascript
Vue3配置axios跨域实现过程解析
Nov 25 Vue.js
基于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 连接mysql连接被重置的解决方法
2011/02/15 PHP
php实现的网络相册图片防盗链完美破解方法
2015/07/01 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
2016/07/09 PHP
PHP长网址与短网址的实现方法
2017/10/13 PHP
laravel实现按时间日期进行分组统计方法示例
2019/03/23 PHP
jquery与js函数冲突的两种解决方法
2013/09/09 Javascript
js防止表单重复提交的两种方法
2013/09/30 Javascript
js实现仿微博滚动显示信息的效果
2015/12/21 Javascript
快速掌握Node.js中setTimeout和setInterval的使用方法
2016/03/21 Javascript
JavaScript中自带的 reduce()方法使用示例详解
2016/08/10 Javascript
D3.js实现饼状图的方法详解
2016/09/21 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
2017/05/09 Javascript
node.js中fs.stat与fs.fstat的区别详解
2017/06/01 Javascript
vue中使用iview自定义验证关键词输入框问题及解决方法
2018/03/26 Javascript
vue 实现左右拖拽元素并且不超过他的父元素的宽度
2018/11/30 Javascript
ES6常用小技巧总结【去重、交换、合并、反转、迭代、计算等】
2019/12/21 Javascript
vue总线机制(bus)知识点详解
2020/05/10 Javascript
[04:40]2016国际邀请赛中国区预选赛全程TOP10镜头集锦
2016/07/01 DOTA
在Django的视图中使用form对象的方法
2015/07/18 Python
Python批量生成特定尺寸图片及图画任意文字的实例
2019/01/30 Python
python进阶之自定义可迭代的类
2019/08/20 Python
Python list与NumPy array 区分详解
2019/11/06 Python
python对验证码降噪的实现示例代码
2019/11/12 Python
纯CSS3打造动感漂亮时尚的扇形菜单
2014/03/18 HTML / CSS
html5中的input新属性range使用记录
2014/09/05 HTML / CSS
致百米运动员广播稿
2014/01/29 职场文书
学校联谊活动方案
2014/02/15 职场文书
经典而简洁的婚礼主持词
2014/03/13 职场文书
促销活动总结报告
2014/04/26 职场文书
三月学雷锋月活动总结
2014/04/28 职场文书
室内设计专业自荐信
2014/05/31 职场文书
财务负责人任命书
2014/06/06 职场文书
小学综合实践活动总结
2014/07/07 职场文书
学生打架检讨书
2014/10/20 职场文书
财务稽核岗位职责
2015/04/13 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书