在我的索引中.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;
}]
}
})
若要将更改应用于视图,必须在控制器的$scope
上绑定$routeChangeSuccess <</strong>br/>事件。
$scope.$on('$routeChangeSuccess', function(next, current) {
$rootScope.feedJobTagName = "new value";
});
请注意,它无法在控制器内部
$rootScope
正常工作。
尽管控制器的作用域已更新,但更改不会应用于视图,因为路由的 resolve 对象返回承诺。(看看这里到底发生了什么)
至于所有异步任务,您要么需要$apply
对摘要循环的更改,要么使用 Angular 提供的事件 - 在您的情况下$routeChangeSuccess
。
请注意,控制器是在异步get
承诺实现后实例化的。