【问题标题】:Implement custom way of loading AngularJS templates实现加载 AngularJS 模板的自定义方式
【发布时间】:2017-10-11 15:51:19
【问题描述】:

在 AngularJS 中,您可以将外部模板作为脚本标签或作为 Web 服务器上的 html 文件提供。但是我需要实现一个自定义逻辑来检索这些模板,并且没有一个方法适合。所以我想我可以重写AngularJS中实际从服务器加载模板的部分。但事实证明,很难找到这方面的任何信息。我发现$TemplateRequestProvider 用于此任务,但我不知道如何用自定义逻辑替换它。你能帮帮我吗?

【问题讨论】:

    标签: javascript angularjs templates angular-templatecache


    【解决方案1】:

    我不完全确定您要在这里实现什么,因为实际上 $templateRequestProvider 确实 可以为指向它们的给定 URL 检索模板。在后台,当需要位于远程源中的模板时,提供者首先运行其内部缓存,如果请求的模板不可用,它会去获取它。如果响应成功,则响应正文(HTML 内容)被存储并索引在内部存储/缓存中。现在,在不太可能的情况下,资源服务器需要在请求中出现额外的数据集,例如 headers/cookies、强制请求参数、auth。令牌等,那么实际上,您检索这些模板的请求需要更加复杂。话虽如此,我想您真正感兴趣的是能够在请求发送之前就对其进行操作,重写已经由Angular 的开发者。

    尽管如此,如果有真正需要并且有自己定制的机制来处理请求,您可以在 Angular 应用生命周期的配置阶段访问该提供程序。为此,请以这种方式在应用程序模块上使用链式配置:

    app.config(['$templateRequestProvider', function ($templateRequestProvider) {
        $templateRequestProvider.$get = ['$templateCache', '$http', '$q','$sce', ƒunction ($templateCache, $http, $q, $sce) {
            var getRemoteTemplateByUrlFn = function (tplUrl, ignoreRequestError) {
               // here be dragons
               return $http.get ... ;
            };
    
            return getRemoteTemplateByUrlFn;
        }];
    }]). ...
    

    现在,在进入那个阶段之前,我建议您更好地研究 $templateRequestProvider 的文档,除了将 $get 配置对象暴露给提供者的函数之外,它还暴露了 httpOptions(...)您可以调用该函数,传递一个包含一组标头等的 httpOptions 对象,以包含在您获取远程模板的请求中。

    另外,说到模板缓存和按需获取,让我向您介绍ocLazyLoad 库(如果您还没有遇到过的话)。我正在利用它在需要时延迟加载页面源(例如,单击按钮时的模态窗口模板和控制器)。其强大功能包括:

    • 自动加载依赖项
    • 调试器友好(无评估代码)
    • 能够混​​合正常启动和按需加载
    • 通过服务或指令加载
    • 使用嵌入式异步加载器或使用您自己的(requireJS,...)
    • 加载 js(角度或非角度)/css/模板文件

    玩得开心!

    【讨论】:

      猜你喜欢
      • 2016-10-14
      • 1970-01-01
      • 2019-06-06
      • 2010-11-03
      • 2020-10-02
      • 1970-01-01
      • 2018-10-26
      • 1970-01-01
      • 2010-11-15
      相关资源
      最近更新 更多