Html5离线应用程序,角度无法脱机工作

时间:2014-11-12 13:29:43

标签: html5 angularjs caching html5-appcache application-cache

我有一个带有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”它按预期工作,不会去服务器。

非常感谢

1 个答案:

答案 0 :(得分:2)

解决,

问题是清单区分大小写,因此角度路径中的地址应与maninfest中的条目完全匹配。所以例如  //默认root

 $routeProvider.when("/", {
        controller: "toriga.jobsController",
        templateUrl: "templates/jobs.html"
    });

应该与清单条目匹配:

@Url.Content("~/templates/jobs.html")