在我的index.html <head>
中,我有以下元素:
<link
rel="alternate"
type="application/rss+xml"
title="{{feedJobsTagName}} jobs feed"
href="{{feedJobTagsUrl}}"
ng-if="feedJobTagsUrl">
当我将路由更改为新标记时,我有一个解析器来获取标记并更新根范围(TagShowCtrl
)上的两个属性:
$rootScope.feedJobTagsUrl = '/feeds/jobs/'+tag.type+'s/'+tag.nameLower;
$rootScope.feedJobsTagName = tag.name;
如果我刷新页面,我会得到正确的标签名称,但是如果我只是通过链接到新标签名称来更改路线,它似乎会缓存第一个名称而不是用新名称更新它:
.when('/tags/:slug/:id', {
templateUrl: 'partials/tags/show',
controller: 'TagShowCtrl',
resolve: {
tag: ['$route', 'Tag', function($route, Tag){
return Tag.get({ id: $route.current.params.id}).$promise;
}]
}
})
答案 0 :(得分:0)
要将更改应用于视图,您必须在控制器的$scope
上绑定 $ routeChangeSuccess
事件。
$scope.$on('$routeChangeSuccess', function(next, current) {
$rootScope.feedJobTagName = "new value";
});
请注意,它无法在您的控制器内
$rootScope
上正常工作。
虽然您的控制器范围已更新,但更改不会应用于视图,因为路线的解析对象会返回承诺。 (看看究竟发生了什么here)
对于所有异步任务,您需要$apply
对摘要循环进行更改或使用events provided by Angular - 您的情况$routeChangeSuccess
。
请注意,在异步get
承诺完成后,控制器实例化。