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 相关文章推荐
JS实现打开本地文件或文件夹
Mar 09 Javascript
推荐一些非常不错的javascript学习资源站点
Aug 29 Javascript
javascript 读取xml,写入xml 实现代码
Jul 10 Javascript
25个好玩的JavaScript小游戏分享
Apr 22 Javascript
浅析jQuery对select操作小结(遍历option,操作option)
Jul 04 Javascript
js中的onchange和onpropertychange (onchange无效的解决方法)
Mar 08 Javascript
javascript表单验证大全
Aug 12 Javascript
JavaScript记录光标在编辑器中位置的实现方法
Apr 22 Javascript
require.js+vue开发微信上传图片组件
Oct 27 Javascript
JS实现的点击表头排序功能示例
Mar 27 Javascript
详解vue mixins和extends的巧妙用法
Dec 20 Javascript
vue实现权限控制路由(vue-router 动态添加路由)
Nov 04 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
PHP生成excel时单元格内换行问题的解决方法
2010/08/26 PHP
php 广告调用类代码(支持Flash调用)
2011/08/11 PHP
解析array splice的移除数组中指定键的值,返回一个新的数组
2013/07/02 PHP
php计算程序运行时间的简单例子分享
2014/05/10 PHP
PHP自定义序列化接口Serializable用法分析
2017/12/29 PHP
用 JavaScript 迁移目录
2006/12/18 Javascript
Prototype RegExp对象 学习
2009/07/19 Javascript
jQuery表单验证插件formValidator(改进版)
2012/02/03 Javascript
js实现屏蔽默认快捷键调用自定义事件示例
2013/06/18 Javascript
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
微信小程序与php 实现微信支付的简单实例
2017/06/23 Javascript
深入理解React Native原生模块与JS模块通信的几种方式
2017/07/24 Javascript
jQuery DOM节点的遍历方法小结
2017/08/15 jQuery
利用JS实现scroll自定义滚动效果详解
2017/10/17 Javascript
webpack开发环境和生产环境的深入理解
2018/11/08 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
2019/02/27 Javascript
vue以组件或者插件的形式实现throttle或者debounce
2019/05/22 Javascript
微信小程序-API接口安全详解
2019/07/16 Javascript
Element-ui DatePicker显示周数的方法示例
2019/07/19 Javascript
用js限制网页只在微信浏览器中打开(或者只能手机端访问)
2020/12/24 Javascript
用python写的一个wordpress的采集程序
2016/02/27 Python
python 异常处理总结
2016/10/18 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
Python实战购物车项目的实现参考
2019/02/20 Python
利用python如何在前程无忧高效投递简历
2019/05/07 Python
Python中一些深不见底的“坑”
2019/06/12 Python
python爬虫-模拟微博登录功能
2019/09/12 Python
Pycharm中import torch报错的快速解决方法
2020/03/05 Python
兰蔻加拿大官方网站:Lancome加拿大
2016/08/05 全球购物
澳大利亚墨水站Ink Station:墨水和碳粉打印机墨盒
2019/03/24 全球购物
教师党性分析材料
2014/02/04 职场文书
安全生产责任书
2014/03/12 职场文书
法人代表委托书
2014/04/04 职场文书
求职自我评价范文100字
2014/09/23 职场文书
道歉的话怎么说
2015/05/12 职场文书
Pytorch中expand()的使用(扩展某个维度)
2022/07/15 Python