Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.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
Angularjs 部署ASP.NETMVC时,角度应用程序下载文件发生更改_Angularjs_Asp.net Mvc 4_Caching_Bundle_Browser Cache - Fatal编程技术网

Angularjs 部署ASP.NETMVC时,角度应用程序下载文件发生更改

Angularjs 部署ASP.NETMVC时,角度应用程序下载文件发生更改,angularjs,asp.net-mvc-4,caching,bundle,browser-cache,Angularjs,Asp.net Mvc 4,Caching,Bundle,Browser Cache,我有一个ASP.net应用程序,它使用AngularJs、Javascript和HTML5。 问题是,每次我部署浏览器时,可能会缓存一些文件,这会导致错误,因为用户没有获得最新的Html和javascript文件 我知道HTML5有一个清单文件,可以强制下载文件,但是当文件发生实际更改时,有没有更有效的方法来下载文件 我知道bundles只对Javascript文件而不是HTML文件执行此操作 我不确定它是否与angularjs相关,因为许多HTML文件都是使用ng视图和模板交换的 任何线索都将

我有一个ASP.net应用程序,它使用AngularJs、Javascript和HTML5。 问题是,每次我部署浏览器时,可能会缓存一些文件,这会导致错误,因为用户没有获得最新的Html和javascript文件

我知道HTML5有一个清单文件,可以强制下载文件,但是当文件发生实际更改时,有没有更有效的方法来下载文件

我知道bundles只对Javascript文件而不是HTML文件执行此操作

我不确定它是否与angularjs相关,因为许多HTML文件都是使用ng视图和模板交换的

任何线索都将不胜感激

我正在尝试使用捆绑包,但不确定这是否适用于使用AngularJs的html文件

谢谢更新的答案

我不确定它是否与许多HTML相关 使用ng视图和模板交换文件

捆绑减少了对服务器的请求数量。对于AngularJS,您可以在构建时使用一种技术将模板与javascript内联。这是一个基于Grunt构建系统的插件。

现在您可以为JS使用bundle了

其他选项围绕浏览器缓存,甚至不用担心绑定模板。 基于Grunt的构建具有良好的缓存破坏机制。进一步描述。 我建议您查看缓存选项和下面的一些要点。缓存选项在web服务器级别设置

经验法则 永远不要缓存第一页(index.html)或缓存修改后的标题。 缓存从主页解析的每个资源

用于引用的资源

使用基于Grunt的构建和插件

此插件的工作方式是,它将计算HTML中引用的每个资源的哈希值,并使用file.HASH重命名该文件,确保其引用也被更新。 它也足够聪明,可以忽略基于CDN的远程URL

如果客户端甚至不向您发送请求,您就无法从服务器执行任何操作


HTML5缓存清单不能在所有浏览器上运行(即,您可以将web.config配置为在asp.net应用程序中禁用缓存)

  <system.webServer>
    <staticContent>
      <clientCache cacheControlMode="DisableCache" />
    </staticContent>
  </system.webServer>

一般来说,为了控制包含的web资源
js/css/…
缓存行为,我建议管理某种类型的版本id并将其附加到include元素中

例如:

甚至

部署新应用程序后,浏览器将忽略预览缓存文件并使用较新的文件

如果您使用源代码管理(git/svn/…),您可以使用最新的提交id作为版本id。否则,请手动管理此版本id(增量编号)


如果您使用的是构建服务器,您可以在构建脚本中添加一条规则,为您自动执行此过程。

否,html文件不捆绑在ASP.NET MVC中。这可以通过js或css完成,但html文件通常需要通过URL直接寻址

在新版本的模板中加载Angular的一种简单方法是,只要在Angular中使用模板URL的任何位置添加一个唯一的查询字符串参数:

module.directive('myDirective', function() {
    return {
        // add querystring with deploy date, or whatever
        templateUrl: '/Path/Template.html' + '?noCache=08102014', 
        controller: controller
    };
});

当然,一个更干净、更易于维护的解决方案是将模板编译成javascript字符串,然后可以像Angular应用程序的任何其他部分一样捆绑在一起。这将是这种方法的一个候选方案。

在开发模式下,您的浏览器应该能够禁用javascript缓存(在大多数浏览器中为F12)。当您请求文件包(bundle.js)时,您可以将其作为“bundle.js?20140810”获取,更新后您可以更改日期时间戳。