$rootScope属性不会在 Angularjs 中的路由更改时更新



在我的索引中.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承诺实现后实例化的

最新更新