组件未刷新$ emit上的作用域

问题描述 投票:0回答:1

我在AngularJS中有一个组件,其值保存到范围内,该范围为视图中的<img>提供URL。当用户更改图像时,控制器会通过$rootScope.$emit发出更改,并且URL值也会更新,显示新上载图像的视图也应更新:

angular.module('ppApp').component('mainnav', {
    templateUrl: 'app/templates/nav/nav.main-nav.tpl.htm',
    controller: ['$scope', function($scope){

        vm.avatarimage = '../p3sweb/avatarImage';

        $rootScope.$on('refreshAvatar', function(){
           console.log('change avatar')
           vm.avatarimage = '../p3sweb/avatarImage';
        })

    }]
})

//Controller
$rootScope.$emit('refreshAvatar',function(){ //value refreshAvatar emitted when they have loaded new image

})

//view
<img data-ng-src="{{$ctrl.avatarimage}}" alt="users profile pic" class="profile-pic-radius">

[发射物被拾取并记录了'change avatar',但是在刷新页面后图像没有更新。

问题

我如何仅刷新组件,以便它更新范围并显示刚上传的新图像?

angularjs components
1个回答
0
投票

这不是Angular.js的问题,但是您需要技巧来更新图像,因为img标记只有在其来源更改后才会被更新。

您可以在图像源URI的末尾添加时间戳。

...
    $rootScope.$on('refreshAvatar', function(){
        console.log('change avatar')
        // SEE HERE!!!
        var timestamp = new Date().getTime();
        vm.avatarimage = '../p3sweb/avatarImage' + '?' + timestamp;
    })
...
© www.soinside.com 2019 - 2024. All rights reserved.