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 相关文章推荐
JavaScript 高级语法介绍
Jun 15 Javascript
img标签中onerror用法
Aug 13 Javascript
jQuery中大家不太了解的几个方法
Mar 04 Javascript
js实现最短的XML格式化工具实例
Mar 12 Javascript
javascript禁止访客复制网页内容的实现代码
Aug 05 Javascript
Javascript之Number对象介绍
Jun 07 Javascript
浅谈JS使用[ ]来访问对象属性
Sep 21 Javascript
微信小程序 在线支付功能的实现
Mar 14 Javascript
解决Vue-cli npm run build生产环境打包,本地不能打开的问题
Sep 20 Javascript
实例讲解JavaScript截取字符串
Nov 30 Javascript
layui 阻止图片上传的实例(before方法)
Sep 26 Javascript
JS内置对象和Math对象知识点详解
Apr 03 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工程师VIM配置分享
2015/12/15 PHP
Linux安装配置php环境的方法
2016/01/14 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
PHP信号处理机制的操作代码讲解
2019/04/19 PHP
javascript比较文档位置
2008/04/08 Javascript
javascript 事件绑定问题
2011/01/01 Javascript
jQuery源码分析-03构造jQuery对象-工具函数
2011/11/14 Javascript
Js-$.extend扩展方法使方法参数更灵活
2013/01/15 Javascript
js中函数声明与函数表达式
2015/06/03 Javascript
js实现带圆角的两级导航菜单效果代码
2015/08/24 Javascript
AngularJs定制样式插入到ueditor中的问题小结
2016/08/01 Javascript
利用Bootstrap实现表格复选框checkbox全选
2016/12/21 Javascript
js实现仿购物车加减效果
2017/03/01 Javascript
使用node.js对音视频文件加密的实例代码
2017/08/30 Javascript
vue 粒子特效的示例代码
2017/09/19 Javascript
Vue组件之Tooltip的示例代码
2017/10/18 Javascript
微信小程序progress组件使用详解
2018/01/31 Javascript
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
2018/03/06 Javascript
浅谈在node.js进入文件目录的问题
2018/05/13 Javascript
vue-cli3.0 脚手架搭建项目的过程详解
2018/10/19 Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
2019/03/07 Javascript
微信小程序自定义yPicker组件实现省市区三级联动功能
2020/10/29 Javascript
python统计字符串中指定字符出现次数的方法
2015/04/04 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
python实现自主查询实时天气
2018/06/22 Python
Python操作MySQL数据库实例详解【安装、连接、增删改查等】
2020/01/17 Python
金融学专业大学生职业生涯规划
2014/03/07 职场文书
社区文化建设方案
2014/05/02 职场文书
世界水日宣传活动总结
2015/02/09 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书
《时代广场的蟋蟀》读后感:真挚友情,温暖世界!
2020/01/08 职场文书
golang 比较浮点数的大小方式
2021/05/02 Golang
聊聊pytorch测试的时候为何要加上model.eval()
2021/05/23 Python
python 管理系统实现mysql交互的示例代码
2021/12/06 Python
一篇文章了解正则表达式的替换技巧
2022/02/24 Javascript
Windows 64位 安装 mysql 8.0.28 图文教程
2022/04/19 MySQL