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 相关文章推荐
Android中资源文件(非代码部分)的使用概览
Dec 18 Javascript
正则表达式中特殊符号及正则表达式的几种方法总结(replace,test,search)
Nov 26 Javascript
浅析JavaScript中的隐式类型转换
Dec 05 Javascript
禁止IE用右键的JS代码
Dec 30 Javascript
extjs 分页使用jsp传递数据示例
Jul 29 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
Mar 21 Javascript
jQuery获取浏览器类型和版本号的方法
Jul 05 Javascript
jquery延迟对象解析
Oct 26 Javascript
微信小程序 Template详解及简单实例
Jan 05 Javascript
React 项目迁移 Webpack Babel7的实现
Sep 12 Javascript
详解webpack引用jquery(第三方模块)的三种办法
Aug 21 jQuery
node.js使用net模块创建服务器和客户端示例【基于TCP协议】
Feb 14 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
《星际争霸II》全新指挥官斯台特曼现已上线
2020/03/08 星际争霸
Win2000+Apache+MySql+PHP4+PERL安装使用小结
2006/10/09 PHP
PHP 采集程序原理分析篇
2010/03/05 PHP
php中通过Ajax如何实现异步文件上传的代码实例
2011/05/07 PHP
用PHP和Shell写Hadoop的MapReduce程序
2014/04/15 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
javascript 一个自定义长度的文本自动换行的函数
2007/08/19 Javascript
防止页面被iframe(兼容IE,Firefox火狐)
2010/07/04 Javascript
javascript中判断一个值是否在数组中并没有直接使用
2012/12/17 Javascript
jQuery语法高亮插件支持各种程序源代码语法着色加亮
2013/04/27 Javascript
js创建元素(节点)示例
2014/01/02 Javascript
Jquery实现地铁线路指示灯提示牌效果的方法
2015/03/02 Javascript
深入浅析react native es6语法
2015/12/09 Javascript
JavaScript对象数组排序函数及六个用法
2015/12/23 Javascript
JavaScript组合模式学习要点
2016/08/26 Javascript
jQuery实现立体式数字动态增加(animate方法)
2016/12/21 Javascript
bootstrap+jQuery实现的动态进度条功能示例
2017/05/25 jQuery
JS去掉字符串中所有的逗号
2017/10/18 Javascript
解读vue生成的文件目录结构及说明
2017/11/27 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
2018/12/06 jQuery
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
2019/10/10 jQuery
python根据距离和时长计算配速示例
2014/02/16 Python
wxPython中listbox用法实例详解
2015/06/01 Python
Python解决N阶台阶走法问题的方法分析
2017/12/28 Python
python ddt实现数据驱动
2018/03/14 Python
Python3数据库操作包pymysql的操作方法
2018/07/16 Python
python退出命令是什么?详解python退出方法
2018/12/10 Python
对Python多线程读写文件加锁的实例详解
2019/01/14 Python
几款Python编译器比较与推荐(小结)
2020/10/15 Python
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
美国最便宜的旅游网站:CheapTickets
2017/07/09 全球购物
大学秋游活动方案
2014/02/11 职场文书
高中微机老师自我鉴定
2014/02/16 职场文书
中央空调节能方案
2014/06/15 职场文书
优秀少先队辅导员事迹材料
2014/12/24 职场文书
浅谈golang package中init方法的多处定义及运行顺序问题
2021/05/06 Golang