`

Angularjs标签模板加载原理

阅读更多

一.前言

        Angularjs提供多种模板加载方案。

1.最基础的为通过预先声明路径的方式,通过Ajax获取。

2.使用诸如gulp-html2js构建工具,将HTML模板转化为js文件使用。

3.使用script标签引入。

        一般实际情况下,开发时使用第一种方式,部署时采取第二种方式,不会采用第三种方式。本文简要说明一下标签引入模板。Angularjs本身支持的标签type为text/ng-template,现在来支持另一种type:text/template。

 

二.代码实现

$templateCache内的模板优先级最高,所以需要使用到。angularjs本身采取将script指令化的方式来实现。

var scriptDirective = ['$templateCache', function($templateCache) {
  return {
    restrict: 'E',
    terminal: true,
    compile: function(element, attr) {
      if (attr.type == 'text/ng-template') {
        var templateUrl = attr.id,
            text = element[0].text;
        $templateCache.put(templateUrl, text);
      }
    }
  };
}];

        代码非常简单,判定类型,写入模板即可。封装后完全看不到内部实现,所以才会再用个人方式实现,用以理解。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>Inline Template</title>
    <script type="text/template" id="love">
        <h3>love is color blind</h3>
        <p>why so serious about the world, behind the darkness</p>
    </script>
    <script src="angular1.2.9.js"></script>
    <script src="angular-sanitize.js"></script>
    <script src="template.js"></script>
</head>
<body ng-app="template">
    <article ng-controller="TemplateCtrl">
        <div ng-bind-html="story"></div>
    </article>
</body>
</html>

template.js

angular.module('template', ['ngSanitize'])
  .run(['$document', '$templateCache', function($document, $templateCache) {
    var scripts = Array.prototype.slice.call($document[0].scripts, 0);
    scripts.forEach(function(script) {
      if (script.type === 'text/template') {
        $templateCache.put(script.id, script.innerHTML);
      }
    });
  }])
  .controller('TemplateCtrl', ['$scope', '$templateCache', '$log', function($scope, $templateCache, $log) {
    $scope.story = $templateCache.get('love');
  }]);

        通过document.scripts这样接近原始的方式来获取对应标签,然后将标签内部的内容写入$templateCache即可,运行效果如下:



文章来源:http://segmentfault.com/a/1190000002418244

  • 大小: 2.5 KB
分享到:
评论

相关推荐

    AngularJS教程之简单应用程序示例

    这可以通过传统的`&lt;script&gt;`标签实现,链接到Google的CDN(内容分发网络)来获取AngularJS库。 ```html ***"&gt; ``` 第二步是使用`ng-app`指令定义AngularJS应用的边界。你可以将`ng-app`直接放置在HTML的根元素上...

    AngularJS 执行流程详细介绍

    这一连串的执行流程构成了AngularJS的核心工作原理,允许开发者编写声明式的代码,由AngularJS负责管理和同步应用状态和视图。理解了AngularJS的执行流程,开发者能够更好地进行开发和调试,构建出高性能、响应式...

    AngularJS Directives

    AngularJS Directives由编译器处理,该编译器会在DOM加载完成后查找与AngularJS相关的指令,并执行相应的函数。Directives通常以特定前缀(如ng-)开始,以便AngularJS识别它们。 ##### 1. **指令的生命周期** - *...

    Matering AngularJS Directives

    理解AngularJS Directives的工作原理对于高效地开发复杂的应用程序至关重要。 - **基础概念**:学习如何创建基本的指令,包括使用`@`、`=`和`&`等符号来绑定指令的行为。 - **高级用法**:深入探索指令的链接函数、...

    AngularJS路由切换实现方法分析

    在本文中,我们将深入探讨AngularJS中的路由切换实现方法,通过具体的实例来理解其工作原理和操作技巧。 1. **引入依赖库** 实现AngularJS路由切换,首先要确保引入了AngularJS的核心库`angular.min.js`和路由插件...

    Packt.Responsive Web Design with AngularJS.2014

    ### 响应式网页设计与AngularJS核心知识点详解 #### 一、响应式网页设计(Responsive Web...通过本书的学习,读者将能够掌握响应式网页设计的基本原理和技术要点,并学会如何利用AngularJS来开发高质量的Web应用程序。

    ace.rar_DEMO_bootstrap_bootstrap模板_网站模板

    在标签中,"bootstrap模板"和"网站模板"进一步强调了这是基于Bootstrap的可复用设计,适用于创建各种类型的网站。Bootstrap模板通常具有跨浏览器兼容性和响应式特性,这意味着无论用户使用何种设备(如桌面、平板或...

    angular tab切换

    4. 懒加载:对于大型项目,可以采用懒加载策略,只有当用户切换到某标签时才加载其内容,减少初始加载时间。 五、案例分析 在提供的"angularjs-tabs滑动切换"示例中,我们可以看到如何实现平滑的标签页滑动效果。这...

    Leanpub.D3.on.AngularJS.Apr.2014

    - **`replace`, `template`, 和 `transclude`**:这些指令允许开发者控制元素的替换、模板的加载以及子元素的传递。 总之,《Leanpub.D3.on.AngularJS.Apr.2014》这本书是一本非常全面的指南,涵盖了从基础知识到...

    AngularJS入门教程引导程序

    **AngularJS入门教程引导程序...通过理解和实践这些基本原理,开发者可以逐步构建更复杂的AngularJS应用程序。在后续的学习中,我们将进一步探索服务、控制器、指令和其他高级特性,使你对AngularJS有更全面的认识。

    AngularJS 与百度地图的结合实例

    要在AngularJS项目中使用百度地图,需要在模板中放置包含地图的div标签,并在相应的控制器中编写初始化地图的逻辑。 但是,直接在AngularJS项目中嵌入百度地图可能会遇到一些问题。在文档中提到,如果将JavaScript...

    AngularJS初始化过程分析(引导程序)

    在ng-app中可以指定一个模块名称,AngularJS将会加载和编译与该模块相关的模板和指令,并创建一个应用程序的注入器(injector)。注入器是一个服务,用于提供和管理应用中的依赖关系。 在AngularJS的初始化过程中,会...

    OA办公系统页面精美模板.zip

    8. **前端框架与库**: 虽然没有明确提及,但现代网页模板可能使用前端框架(如Bootstrap、AngularJS、Vue.js等)和库(如jQuery)来加速开发和提供额外功能。了解这些工具的使用可以帮助开发者更高效地利用模板。 9...

    详解AngularJS中ng-src指令的使用

    这种做法在AngularJS编译HTML模板并应用数据绑定之前,浏览器就已经尝试去加载src指定的图片资源了。如果animal.picture的值是在AngularJS的控制器中定义的,那么在数据绑定生效之前,浏览器会尝试加载一个未经解释...

    SoftUni---SPA-with-AngularJS---HomeworksSolutions:在 SoftUni 上使用 AngularJS 课程为 SPA 提供家庭作业解决方案

    通过深入研究这些作业解决方案,你可以掌握如何利用AngularJS创建高效的SPA,并理解其背后的原理。这将对你的JavaScript开发技能大有裨益,尤其是在现代Web应用开发中,SPA已经成为主流设计模式。

    NodeJS-AngularJS-SinglePageAppDemo

    - **AngularJS的ngRoute**:ngRoute是AngularJS的一个核心模块,它提供了路由服务,使得SPA可以根据URL来加载不同的视图,实现页面的无刷新跳转。通过配置`$routeProvider`,可以设置各个路由对应的模板和控制器。 ...

    简单webform仿Winform TabControl标签页

    在Web开发中,有时我们需要创建类似桌面应用的...当然,还有许多高级的库和框架,如jQuery UI、Bootstrap和AngularJS,它们提供了更强大且开箱即用的选项卡组件,但这个基础实现能帮助理解选项卡功能的基本工作原理。

    angular-tutorials1:angularjs教程

    尽管如此,AngularJS仍有大量的项目在运行,理解其工作原理对于维护旧项目或迁移至新版本至关重要。 本教程"angular-tutorials1"涵盖了AngularJS的基础知识,通过实际项目演练,可以帮助读者掌握这个框架并应用于...

    关于angularJs清除浏览器缓存的方法

    AngularJS的 `$templateCache` 用于存储模板,当路由改变时,可以清除不再需要的模板。在 `.run` 配置中监听 `$routeChangeStart` 事件,移除当前路由对应的模板: ```javascript .run(function($rootScope, $...

Global site tag (gtag.js) - Google Analytics