我不完全确定您要在这里实现什么,因为实际上 $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/模板文件
玩得开心!