Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS:$templateCache是什么?_Javascript_Angularjs_Templates_Caching_Partials - Fatal编程技术网

Javascript AngularJS:$templateCache是什么?

Javascript AngularJS:$templateCache是什么?,javascript,angularjs,templates,caching,partials,Javascript,Angularjs,Templates,Caching,Partials,在分析大型AngularJS应用程序时,我开始跟踪$templateCache $templateCache 这个物体是什么?它是否像存储在磁盘上一样存储片段,还是从路由中存储最终呈现的HTML 我在控制器中添加了一些类似的代码,以确保它不会持久化任何内容: $scope.$on('$destroy',函数清理(){ $templateCache.removeAll(); }); 编辑:我之所以要研究这个问题,是因为一个(不是每个)控制器正在加载一个包含多个循环的大型部分,根据用户输入,它可能有

在分析大型AngularJS应用程序时,我开始跟踪$templateCache

$templateCache

这个物体是什么?它是否像存储在磁盘上一样存储片段,还是从路由中存储最终呈现的HTML

我在控制器中添加了一些类似的代码,以确保它不会持久化任何内容:

$scope.$on('$destroy',函数清理(){
$templateCache.removeAll();
});

编辑:我之所以要研究这个问题,是因为一个(不是每个)控制器正在加载一个包含多个循环的大型部分,根据用户输入,它可能有大约100个输入字段,其中包含大型
语句和许多自定义指令。客户要求这样做,我想确保所有这些都在路由过程中得到处理


为了澄清这个问题:$templateCache只存储磁盘上显示的部分,没有存储路由或渲染信息?

如果我没记错的话,它是保存部分的对象。当对任何html文件发出请求(通过路由、指令或包含)时,angular首先查看
$templateCache
,如果所需文件不存在,它将对其发出请求并将其放入缓存中。但如果它真的存在,它就从那里取而代之。因此,如果您每页使用指令100次,它只会对您的指令文件发出一个请求,或者如果您在应用程序中来回导航,它不会请求已加载的文件


添加
$templateCache.removeAll()有意义吗在每个控制器上?只有当它是一个非常小的应用程序时,否则我建议不要乱搞它。

默认情况下,在加载模板时,Angular会查看$templateCache内部,并在其$templateCache中本地找不到模板时,通过XHR获取模板。 当XHR请求很慢或者我们的模板足够大时,它可能会对最终用户的体验产生严重的负面影响。 我们可以通过将模板缓存加载包装到JavaScript文件中,并将JavaScript文件与应用程序的其余部分一起交付,而不是获取模板XHR

样本:

angular.module('myApp')
.run(['$templateCache', function($templateCache) {
$templateCache.put('xyz.html', ...);
}]);

因此,除非您非常确定要从$templateCache中删除缓存的模板,否则不要这样做。

您说“出现在磁盘上”是什么意思?如果你的意思是“如文件中所示”,那么-是。它不是保存编译模板,而是保存从XHR请求返回的内容。我想这回答了我的问题。我相信渲染后的表单不知何故被缓存到了其他地方。