AngularJS ng-template寄宿方式用法分析


Posted in Javascript onNovember 07, 2016

本文实例讲述了AngularJS ng-template寄宿方式用法。分享给大家供大家参考,具体如下:

如果你是一个angular的开发者的话,对于ng-html2js你应该 很熟悉。对于angular的指令,我们经常需要定义模板( directive template/templateUrl),你可以选择讲html page 放在真正的的web容器中寄宿,也可以选择angular的ng-template 放在view的page之上,抑或也可以讲html打成一个js文件和directive 的js文件合并在一起发布。

对于直接寄宿在web容器.

这很简单,直接放在jetty,tomcat,iis, 抑或node express public目录下。这里没什么可以多说的,所以我们跳过。

angular ng-template模板:

代码如下:

<script type="text/ng-template" id="/tpl.html">
   Content of the template.
</script>

这将会在angular的compile时候解析,angular将会把它放在angular的$templateCache 中。

对于$templateCache,如其名 这是angular对模板的缓存的service。在启用了$templateCache的$http ajax请求, angular将会首先在$templateCache中查找是否有对此url的缓存:

$templateCache.get('templateId.html')

如果存在缓存,着angular将会直接用缓存中获取,并不会在发送一次ajax。 对于所有的指令和模板angular默认启用了templateCache。

这在于angular所处理的模式开发很有关系的。我们经常提到的SPA(single page application) 我们把view的显示处理等表现逻辑推到了前段,而后端提供只与数据有关的soap/restful service 这样对于一个应用程序业务逻辑来说不变的是处理数据的业务逻辑,这份逻辑你可以共享在不管前端是mobile app 或者是浏览器,或者winform gui的图形化程序,因为对于同一个业务这是不变的。将view的分离推到各自的客户端 将是更好的解决方案。

回到angular $templateCahce,对于一个应用程序view的分离,之后在对于当前的应用程序平台,html/js/css 这类资源是静态的,最好是不变的,那么你可以自由的缓存在客户端,减少服务器的交互,以及为了更大的性能追求,我们 可以把这类静态资源放在Nginx这里反向代理或者CDN上,让我们的程序获取更大的性能和扩展空间。

回到angular的ng-html2js:

有了上边对于$templateCache的理解,那你应该很容易理解html2js的方式了,与ng-template不同的 是ng-template是angular在compile的时候自动加入$templateCache的,html2js是我们在开发 时候利用build自己放入$templateCache。

angular.module('myApp', [])
 .run(function($templateCache) {
   $templateCache.put('templateId.html',
     'This is the content of the template'
   );
 });

形如上面的输出,将html文件打成一个js文件。

这你也许在angular的单元测试karma unit test中看见过, karma-ng-html2js-preprocessor ,还有如果你也希望在build时候做到如此,那么你可以使用grunt plugin grunt-html2js.

但使用grunt plugin的前提是你在你的项目中引入的grunt build的work flow,那么你可以在gruntfile.js中几行代码轻松的搞定。但是如果 你和我一样使用的是java的maven或者是gradle 作为build,那么你可以尝试博主的maven plugin  nghtml2js. 使用方式如下:

<plugin>
  <groupId>com.github.greengerong</groupId>
  <artifactId>nghtml2js</artifactId>
  <version>0.0.3</version>
  <configuration>
    <module>demo.template</module>
    <html>${project.basedir}</html>
    <extensions>
      <param>tpl</param>
      <param>html</param>
    </extensions>
  </configuration>
  <executions>
    <execution>
      <id>nghtml2js</id>
      <phase>generate-resources</phase>
      <goals>
        <goal>run</goal>
      </goals>
    </execution>
  </executions>
</plugin>

希望本文所述对大家AngularJS程序设计有所帮助。

Javascript 相关文章推荐
学习ExtJS accordion布局
Oct 08 Javascript
一个简单的jQuery计算器实现了连续计算功能
Jul 21 Javascript
jQuery统计指定子元素数量的方法
Mar 17 Javascript
jQuery实现平滑滚动到指定锚点的方法
Mar 20 Javascript
Bootstrap 模态框实例插件案例分析
Dec 28 Javascript
Flask中获取小程序Request数据的两种方法
May 12 Javascript
layui选项卡效果实现代码
May 19 Javascript
vue.js全局API之nextTick全面解析
Jul 07 Javascript
element-ui使用导航栏跳转路由的用法详解
Aug 22 Javascript
Vue.js 图标选择组件实践详解
Dec 03 Javascript
js实现飞机大战游戏
Aug 26 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
Jan 29 Javascript
easyui messager alert 三秒后自动关闭提示的实例
Nov 07 #Javascript
基于bootstrap-datetimepicker.js不支持IE8的快速解决方法
Nov 07 #Javascript
AngularJS 应用身份认证的技巧总结
Nov 07 #Javascript
AngularJS解决ng界面长表达式(ui-set)的方法分析
Nov 07 #Javascript
基于KO+BootStrap+MVC实现的分页控件代码分享
Nov 07 #Javascript
浅谈EasyUi ComBotree树修改 父节点选择的问题
Nov 07 #Javascript
EasyUI 中combotree 默认不能选择父节点的实现方法
Nov 07 #Javascript
You might like
Win2003服务器安全加固设置--进一步提高服务器安全性
2007/05/23 PHP
一个PHP并发访问实例代码
2012/09/06 PHP
解析php类的注册与自动加载
2013/07/05 PHP
PHP中使用GD库创建圆形饼图的例子
2014/11/19 PHP
php简单实现发送带附件的邮件
2015/06/10 PHP
使用Laravel中的查询构造器实现增删改查功能
2019/09/03 PHP
Javascript学习笔记5 类和对象
2010/01/11 Javascript
jquery的$(document).ready()和onload的加载顺序
2010/05/26 Javascript
根据一段代码浅谈Javascript闭包
2010/12/14 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
三种取消选中单选框radio的方法
2014/09/09 Javascript
ECMAScript 6即将带给我们新的数组操作方法前瞻
2015/01/06 Javascript
Jquery EasyUI Datagrid右键菜单实现方法
2016/12/30 Javascript
js代码规范之Eslint安装与配置详解
2018/09/08 Javascript
微信小程序使用gitee进行版本管理
2018/09/20 Javascript
微信小程序实现单选功能
2018/10/30 Javascript
简单通过settimeout看javascript的运行机制
2019/05/10 Javascript
[05:07]DOTA2英雄梦之声_第14期_暗影恶魔
2014/06/20 DOTA
[05:31]干嘛呢兄弟!DOTA2 TI9语音轮盘部分出处
2019/05/14 DOTA
[36:16]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.19
2020/12/24 DOTA
python 参数列表中的self 显式不等于冗余
2008/12/01 Python
Python中map,reduce,filter和sorted函数的使用方法
2015/08/17 Python
ubuntu环境下python虚拟环境的安装过程
2018/01/07 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
2019/01/17 Python
selenium中get_cookies()和add_cookie()的用法详解
2020/01/06 Python
Python正则表达式学习小例子
2020/03/03 Python
python线性插值解析
2020/07/05 Python
Python实现定时监测网站运行状态的示例代码
2020/09/30 Python
sublime3之内网安装python插件Anaconda的流程
2020/11/10 Python
CSS3实现跳动的动画效果
2016/09/12 HTML / CSS
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
高中毕业自我鉴定
2013/12/19 职场文书
节约用水的口号
2014/06/20 职场文书
2014年最新离婚协议书范本
2014/10/11 职场文书
陈斌强事迹观后感
2015/06/17 职场文书