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的direction图片渐变动画效果
May 24 Javascript
从零开始学习jQuery (四) jQuery中操作元素的属性与样式
Feb 23 Javascript
extjs 初始化checkboxgroup值的代码
Sep 21 Javascript
javascript数组操作总结和属性、方法介绍
Apr 05 Javascript
浅谈javascript 归并方法
Jan 21 Javascript
Jquery实现的简单轮播效果【附实例】
Apr 19 Javascript
Bootstrap模态框插件使用详解
May 11 Javascript
详解AngularJS跨页面传值(ui-router)
Aug 23 Javascript
Router解决跨模块下的页面跳转示例
Jan 11 Javascript
Angular中sweetalert弹框的基本使用教程
Jul 22 Javascript
vue实现多级菜单效果
Oct 19 Javascript
vue实现lodop打印功能的示例
Nov 11 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
[EPIC] Larva vs Flash ZvT @ Crossing Field [2017-10-09]
2020/03/17 星际争霸
php的list()的一步操作给一组变量进行赋值的使用
2011/05/18 PHP
php 操作数组(合并,拆分,追加,查找,删除等)
2012/07/20 PHP
php简单统计在线人数的方法
2016/05/10 PHP
PHP自带方法验证邮箱、URL、IP是否合法的函数
2016/12/08 PHP
编辑浪子版表单验证类
2007/05/12 Javascript
JavaScript 应用技巧集合[推荐]
2009/08/30 Javascript
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
2011/08/28 Javascript
js 可拖动列表实现代码
2011/12/13 Javascript
node.js中的fs.futimesSync方法使用说明
2014/12/17 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
2015/11/30 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
2016/08/02 Javascript
jQuery右下角悬浮广告实例
2016/10/17 Javascript
assert()函数用法总结(推荐)
2017/01/25 Javascript
javascript流程控制语句集合
2017/09/18 Javascript
vue项目tween方法实现返回顶部的示例代码
2018/03/02 Javascript
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
2019/04/04 Javascript
layui添加动态菜单与选项卡
2019/07/26 Javascript
Vue之Mixins(混入)的使用方法
2019/09/24 Javascript
JS深入学习之数组对象排序操作示例
2020/05/01 Javascript
JS中锚点链接点击平滑滚动并自由调整到顶部位置
2021/02/06 Javascript
[48:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 VG vs KG
2018/03/31 DOTA
django认证系统 Authentication使用详解
2019/07/22 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
2019/08/06 Python
Python数据可视化实现正态分布(高斯分布)
2019/08/21 Python
python智联招聘爬虫并导入到excel代码实例
2019/09/09 Python
Java多态性的定义以及类型
2014/09/16 面试题
使用索引有什么好处
2016/07/27 面试题
事业单位个人应聘自荐信
2013/09/21 职场文书
九年级家长会邀请函
2014/01/15 职场文书
个人授权委托书范本
2014/04/03 职场文书
我的梦想演讲稿1000字
2014/08/21 职场文书
财务助理岗位职责范本
2014/10/09 职场文书
机关单位工作失职检讨书
2014/11/20 职场文书
股东协议书范本2016
2016/03/21 职场文书
CSS3实现的水平标题菜单
2021/04/14 HTML / CSS