我有一个带有angularJs,Breeze和Asp.net MVC的单页html5离线应用程序。该应用程序旨在将所有文件存储在缓存中,然后离线工作。我们有一个清单文件,列出了应用程序需要的所有文件,包括用于插入主页面的角度的所有模板。要加载模板,我们使用标准的角度路径。当与服务器建立连接时,应用程序工作正常,这是因为每次角度获取模板时,即使文件位于本地缓存中,它也会从服务器获取模板。一旦Angular获取模板一次,如果再次加载相同的URL,它就可以正常工作并从本地缓存中加载它。
下面是我们的缓存清单示例(我已尝试删除Appendhash)
CACHE MANIFEST
# version 0.90
# @Url.Content("~/views/shared/_LayoutSPA.cshtml").AppendHash(Request)
# @Url.Content("~/views/portal/Index.cshtml").AppendHash(Request)
CACHE:
# AppendHash approach from @@ShirtlessKirk via http://bit.ly/12HlyCD to ensure the content manifest changes any time any page referencing it changes
Index
@Url.Content("~/Templates/jobSummaryNotes.html").AppendHash(Request)
@Url.Content("~/Templates/notfound.html").AppendHash(Request)
@Url.Content("~/Templates/orderInstall.html").AppendHash(Request)
@Url.Content("~/Templates/packages.html").AppendHash(Request)
@Url.Content("~/Templates/parties.html").AppendHash(Request)
@Url.Content("~/Templates/party.html").AppendHash(Request)
@Url.Content("~/Templates/property.html").AppendHash(Request)
@Url.Content("~/Templates/profit.html").AppendHash(Request)
@Url.Content("~/Templates/quote.html").AppendHash(Request)
@Url.Content("~/Templates/quotes.html").AppendHash(Request)
我已经检查了chrome中的缓存以及所有文件等。
下面是我们的标准路线配置
.config(["$routeProvider", function ($routeProvider) {
'use strict';
// default root
$routeProvider.when("/", {
controller: "toriga.jobsController",
templateUrl: "templates/jobs.html"
});
$routeProvider.when("/notfound/", {
templateUrl: "templates/notfound.html"
});
$routeProvider.when("/epc/:id", {
controller: "toriga.epcController",
templateUrl: "templates/epc.html"
});
部分路线带有参数。
我们真的很困惑为什么angular不从应用程序缓存中获取模板,以及为什么一旦你访问了页面,例如“epc”,如果再次导航到“epc”它按预期工作,不会去服务器。
非常感谢
答案 0 :(得分:2)
解决,
问题是清单区分大小写,因此角度路径中的地址应与maninfest中的条目完全匹配。所以例如 //默认root
$routeProvider.when("/", {
controller: "toriga.jobsController",
templateUrl: "templates/jobs.html"
});
应该与清单条目匹配:
@Url.Content("~/templates/jobs.html")