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 相关文章推荐
use jscript Create a SQL Server database
Jun 16 Javascript
Javascript页面添加到收藏夹的简单方法
Aug 07 Javascript
js事件监听机制(事件捕获)总结
Aug 08 Javascript
5个可以帮你理解JavaScript核心闭包和作用域的小例子
Oct 08 Javascript
基于jquery实现表格内容筛选功能实例解析
May 09 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
Aug 19 Javascript
Node.js开启Https的实践详解
Oct 25 Javascript
用jquery的attr方法实现图片切换效果
Feb 05 Javascript
Vue表单类的父子组件数据传递示例
May 03 Javascript
react配置antd按需加载的使用
Feb 11 Javascript
Vue解析带html标签的字符串为dom的实例
Nov 13 Javascript
基于JavaScript实现年月日三级联动
Jun 22 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
第1次亲密接触PHP5(1)
2006/10/09 PHP
curl 出现错误的调试方法(必看)
2017/02/13 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
2019/01/23 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
jquery.validate使用攻略 第二部
2010/07/01 Javascript
js获取php变量的实现代码
2013/08/10 Javascript
Jquery easyui 下loaing效果示例代码
2013/08/12 Javascript
基于MVC3方式实现下拉列表联动(JQuery)
2013/09/02 Javascript
jquery选择器需要注意的问题
2014/11/26 Javascript
JavaScript 学习笔记之操作符(续)
2015/01/14 Javascript
PHP实现的各种中文编码转换类分享
2015/01/23 Javascript
Jquery easyui 实现动态树
2015/11/17 Javascript
谷歌showModalDialog()方法不兼容出现对话窗口的解决办法
2016/02/15 Javascript
Angularjs material 实现搜索框功能
2016/03/08 Javascript
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
Backbone View 之间通信的三种方式
2016/08/09 Javascript
PhotoSwipe异步动态加载图片方法
2016/08/25 Javascript
js实现贪吃蛇小游戏(容易理解)
2017/01/22 Javascript
Vue.js递归组件构建树形菜单
2017/12/24 Javascript
laydate时间日历插件使用方法详解
2018/11/14 Javascript
基于JS实现视频上传显示进度条
2020/05/12 Javascript
[01:00]DOTA2 store: Collection of Artisan's Wonders
2015/08/12 DOTA
Python实现删除文件但保留指定文件
2015/06/21 Python
浅谈python 里面的单下划线与双下划线的区别
2017/12/01 Python
浅析Python3爬虫登录模拟
2018/02/07 Python
Python求两点之间的直线距离(2种实现方法)
2019/07/07 Python
Python 函数用法简单示例【定义、参数、返回值、函数嵌套】
2019/09/20 Python
使用python和pygame制作挡板弹球游戏
2019/12/03 Python
CSS3的Border-radius轻松制作圆角
2012/12/24 HTML / CSS
HTML5画渐变背景图片并自动下载实现步骤
2013/11/18 HTML / CSS
Abe’s of Maine:自1979以来销售相机和电子产品
2016/11/21 全球购物
喜诗官方在线巧克力店:See’s Candies
2017/01/01 全球购物
工作中个人的自我评价
2013/12/31 职场文书
Python Numpy之linspace用法说明
2021/04/17 Python
MybatisPlus代码生成器的使用方法详解
2021/06/13 Java/Android