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

时间:2019-10-25 14:23:13

标签: angularjs components

我在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”,但是刷新页面后图像没有更新。

问题

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

1 个答案:

答案 0 :(得分:1)

这不是Angular.js的问题,但是您需要技巧来更新图像,因为img标签要等到其来源更改后才能更新。

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

...
    $rootScope.$on('refreshAvatar', function(){
        console.log('change avatar')
        // SEE HERE!!!
        var timestamp = new Date().getTime();
        vm.avatarimage = '../p3sweb/avatarImage' + '?' + timestamp;
    })
...