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 相关文章推荐
用jscript实现新建和保存一个word文档
Jun 15 Javascript
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
Jun 27 Javascript
js实现圆盘记速表
Aug 03 Javascript
基于jquery实现下拉框美化特效
Feb 02 Javascript
AngularJS ng-mousedown 指令
Aug 02 Javascript
浅谈JavaScript中的apply/call/bind和this的使用
Feb 26 Javascript
js利用for in循环获取 一个对象的所有属性以及值的实例
Mar 30 Javascript
JavaScript实现动态添加、移除元素或属性的方法分析
Jan 03 Javascript
浅谈Vue CLI 3结合Lerna进行UI框架设计
Apr 14 Javascript
使用pkg打包ThinkJS项目的方法步骤
Dec 30 Javascript
Node.js API详解之 tty功能与用法实例分析
Apr 27 Javascript
vue项目中播放rtmp视频文件流的方法
Sep 17 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
浅谈电磁辐射对健康的影响
2021/03/01 无线电
使用PHP制作新闻系统的思路
2006/10/09 PHP
PHP输出数组中重名的元素的几种处理方法
2012/09/05 PHP
三个类概括PHP的五种设计模式
2012/09/05 PHP
最常用的8款PHP调试工具
2014/07/06 PHP
Yii把CGridView文本框换成下拉框的方法
2014/12/03 PHP
Yii中的relations数据关联查询及统计功能用法详解
2016/07/14 PHP
在PHP语言中使用JSON和将json还原成数组的方法
2016/07/19 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
2020/08/24 PHP
可以支持多中格式的JS键盘
2007/05/02 Javascript
使用基于jquery的gamequery插件做JS乒乓球游戏
2011/07/31 Javascript
JavaScript单元测试ABC
2012/04/12 Javascript
js加入收藏夹代码(兼容ie/ff/op)
2014/05/16 Javascript
jQuery之DOM对象和jQuery对象的转换与区别分析
2015/01/08 Javascript
javascript创建函数的20种方式汇总
2015/06/23 Javascript
jQuery移动端图片上传组件
2016/06/12 Javascript
学习掌握JavaScript中this的使用技巧
2016/08/29 Javascript
JavaScript实现图片懒加载(Lazyload)
2016/11/28 Javascript
使用openSpeDiv方法实现Ecshop登录弹窗框效果
2017/03/13 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
JavaScript惰性求值的一种实现方法示例
2019/01/11 Javascript
JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去
2019/07/23 Javascript
vue实现设置载入动画和初始化页面动画效果
2019/10/28 Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
2019/11/09 Javascript
微信小程序实现抖音播放效果的实例代码
2020/04/11 Javascript
Python打造出适合自己的定制化Eclipse IDE
2016/03/02 Python
django主动抛出403异常的方法详解
2019/01/04 Python
python暴力解压rar加密文件过程详解
2019/07/05 Python
python实现证件照换底功能
2019/08/20 Python
详解Python中namedtuple的使用
2020/04/27 Python
Python实现一个简单的毕业生信息管理系统的示例代码
2020/06/08 Python
英国PC组件和在线电脑商店:SCAN
2019/04/18 全球购物
Farfetch美国:奢侈品牌时尚购物平台
2019/05/02 全球购物
给朋友的道歉短信
2015/05/12 职场文书
亮剑观后感
2015/06/05 职场文书
Java常用函数式接口总结
2021/06/29 Java/Android