【问题标题】:How to reload a css background-image inside a directive如何在指令中重新加载 CSS 背景图像
【发布时间】:2014-09-24 21:51:34
【问题描述】:

在 Angular 中,我有加载背景图像属性的指令。如何让背景图片按需重新加载?

app.directive('profilePhotoPreview', function () {
    return {
        restrict: "A",
        scope: {
            uuid: "="
        },
        template: "",
        link: function (scope, element, attrs) {
            scope.$watch('uuid', function (value) {
                console.log('profilePhotoPreview ',value);
                if (scope.uuid) {
                    scope.preview = "url('"+conf.s3 + "user_profile_photos/" + scope.uuid + ".jpg')";

                    var s={'width':'400px', 'height':'400px','background-image': scope.preview}
                    element.css(s);
                }

            })

        }
    }
});

在这种情况下,基础照片已更改(即已上传新的个人资料照片),但 url 是相同的。

我尝试在 uuid 变量上设置 $watch 并将其值从 null 翻转回其旧值以欺骗 Angular 重新渲染 css,但这没有效果。

【问题讨论】:

  • 这可能是浏览器使用缓存数据的结果吗?

标签: javascript css angularjs


【解决方案1】:

在这种情况下,浏览器已经缓存了该图像。要重新加载它,您可以将“?xxxx”添加到图片网址,其中“xxxx”是一个随机字符串。

我的意思是你只需要在你想重新加载图片时改变你的 scope.preview 变量:

scope.preview = "url('"+conf.s3 + "user_profile_photos/" + scope.uuid + ".jpg?"+getRandomInt(0, 10000)+")";

function getRandomInt(min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

【讨论】:

  • 这将导致所有用户个人资料图像始终被下载。
  • 我们只能在图片更新时添加'?xxxx'。所以默认情况下,它会以 '.jpg' 结尾的明确 url
  • 这里最好使用ng-style,这样angular可以自己改变风格,不用jquery。这样会更清楚。
猜你喜欢
  • 2021-05-26
  • 2014-10-27
  • 2011-03-05
  • 2014-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
相关资源
最近更新 更多