0

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

4

1 回答 1

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/模板文件

玩得开心!

于 2017-10-10T21:58:45.770 回答