我在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”,但是刷新页面后图像没有更新。
问题
如何仅刷新组件,以便它更新范围并显示刚刚上传的新图像?
答案 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;
})
...