如何在AngularJS中重新加载ng include
How to reload ng-include in AngularJS?
我通过创建一个与我在节点中编写的系统交互的站点来学习AngularJS。这个网站的一部分要求我从两个不同的地方获取信息(例如,我自己存储的名称数据库中的城镇名称,加上另一个网站的天气)。我使用这个片段来获取数据:
<tr ng-repeat="town in towns | filter:query | orderBy:orderBy">
<td ng-bind="town.ShortName"></td>
<td ng-include src="'http://example.com/weather/' + town.ID'"></td>
</tr>
这很好,因为我得到了城镇名称(例如墨尔本)和天气数据。接下来,我添加了socket.io来监听事件(例如天气更新):
<script type="text/javascript">
var socket = io.connect();
socket.on("weatherupdate", function() {
angular.element("#listController").scope().reloadView()
})
</script>
这是我的控制器中的重新加载功能:
$scope.reloadView = function() {
$route.reload();
}
这在很大程度上是有效的。如果我更改了城镇的ShortName,下次发出"weatherupdate"时,视图会闪烁(就像重新加载一样),然后是新城镇。ShortName显示在td
中。
然而,天气不会改变。如果我手动重新加载页面(使用F5或javascript函数来重新加载整个页面),新天气会很好地获取,但当函数自动重新加载路线时,除了ng-include src
之外的所有内容都会更新。
我还尝试添加
$templateCache.remove($route.current.templateUrl);
略高于CCD_ 3,但无效。我想我可以$http.get天气数据并对其进行操作,但我认为ng-include
将是一个很好且简单的
使用$templateCache.remove($route.current.templateUrl);
将删除页面的缓存,但不会删除从该路由发出的所有外部请求的缓存,因此这不是您想要的。
在重新加载之前,您需要删除包含的每个url的缓存,或者需要一种绕过缓存的方法。一个简单的方法是在url中添加更新时的查询参数,如下所示:
在您的列表控制器中:
$scope.updateTime = Date.now();
在您的HTML:中
<tr ng-repeat="town in towns | filter:query | orderBy:orderBy">
<td ng-bind="town.ShortName"></td>
<td ng-include src="'http://example.com/weather/' + town.ID + '?updated=' + updateTime"></td>
</tr>
虽然服务器将忽略更新后的查询参数,但由于url不同,任何类型的缓存都不会应用。
相关文章:
- ng绑定和ng href问题.ng href未从控制器加载数据
- 用于在ng映射中加载GeoJSON的回调
- 有没有办法在AngularJS中强制重新加载递归ng-include
- 避免在用ng href加载样式表之前显示内容
- 隐藏元素直到加载完成(ng斗篷不是我需要的)
- 当在ng视图中加载新路由时,Tabbing(tabindex)针对错误的元素
- Angular 和 django 无法加载 ng-bind
- 在 DOM 中动态重新加载 ng 重复数据
- 在AngularJs中无法加载ng-view
- Angular 不会加载 ng-admin
- 在加载ng选项之前更新模型时选择选项
- 重新加载ng重复,使用新数据
- 如何在AngularJS中重新加载ng include
- Ionic框架未加载ng模型变量
- 重新加载ng表不起作用
- Angular/Javascript -重新加载ng-repeat的数据后更改类
- 如何加载ng-src取决于值
- 在加载ng-view模板失败时显示错误页面
- 如何从返回JSON的REST web服务加载ng表中的数据
- 未捕获的错误:即使在加载ng路线后也有角度