【发布时间】:2014-06-02 18:43:00
【问题描述】:
我有一个作为前端 MVC 运行 Angular 的应用程序,但后端代码并不是专门为它设计的。我有一个页面,其中列出了您可以使用搜索选项过滤的内容。所有的搜索功能都有效,因为如果我点击搜索,手动重新加载页面,我期望的数据就会返回。我的问题是如何让 ng-view 重新加载作为“模板”的 php 文件。我知道这不是单页应用程序的最佳实践,所以请放过我。我的控制器在搜索表单的 ng-submit 上是否可以说:“嘿,ng-view,重新加载您的模板。”这似乎是一件相对微不足道的事情,但文档帮助不大。
忘了提到我尝试使用 $route.reload(),但这只是重新加载页面,因为它在添加搜索参数之前出现。我可以使用 $window.location.reload(),但这违背了单页应用程序的目的。
我运行了一个 ajax 函数来更新会话中的搜索变量,(这是一种愚蠢的搜索方式,但是所有者写了它,我不会踩到他的脚趾告诉他这是错误的) .此时,如果您通过 F5 重新加载页面,它会加载预期的数据,但是当我运行 $route.reload() 时,它不会再次运行 php 并获得更新的结果,它会重新加载视图,就好像php 从未改变。
agencyMatrix.controller('singlePage', function($scope, $route){
$scope.reset = function(targetUrl){
$.ajax({
type: "GET",
url: targetUrl,
success: function() {
$route.reload();
}
});
}
});
【问题讨论】:
-
我不明白。你能提供一些代码吗?
-
您是否尝试过清除 $templateCache?可能类似于 $templateCache.remove(pathInConfig) 或 $templateCache.removeAll()。 Angular 试图通过在页面上将模板存储在 $templateCache 中来提高效率,这样它就不必每次都访问服务器。刷新页面会有效地清除 $templateCache(以及在 javascript 中初始化的所有其他内容)。
-
我正在运行开发人员工具以防止缓存,但我会尝试这样做。
-
浏览器中的缓存和什么角度缓存是不同的概念。 From Angular:第一次使用模板时,将其加载到模板缓存中以便快速检索。我相信将 $templateCache 注入您的控制器,然后在您的 $.ajax 调用之前删除模板将允许它再次从 PHP 中获取。
-
我该死的,帕特里克,那成功了。这就是我假设如果 chrome 的缓存偏离角度也不会缓存的假设。把它作为一个答案,我很乐意接受。
标签: javascript php angularjs