【问题标题】:Angular ng-src when changing source of an image not updating scope更改图像源而不更新范围时的Angular ng-src
【发布时间】:2014-10-24 06:41:01
【问题描述】:

我的控制器内部有下面的 sn-p:

$scope.onFileSelect = function($files) {
    for(var i = 0; i < $files.length; i++) {
        var file = $files[i];

        $scope.upload = $upload.upload({
            url: '/smart2/api/files/profile',
            file: file
        }).success(function(data) {
            $scope.photo = data;
        });
    }
}

当用户加载页面时,他们可以点击模式来上传个人资料照片。在该模式中,它显示了他们当前的个人资料照片和上传输入。

我在图片标签上附加了ng-src,一切正常。但是,当用户上传新的头像时,在上传调用的success 函数中,我设置了$scope.photo(在ng-src 中引用)。

我知道我需要通知 Angular 它已更改,但不知道如何更改。 HTTP 调用返回的数据将始终是 ng-src$scope.photo 中已有的相同数据,但它会发生变化。

个人资料照片的名称是用户的姓名,因此即使他们上传新照片,文件名或来源仍保持不变,但实际文件不同。

问题是,当我在成功函数中设置$scope.photo 时,照片没有更新。可能是什么问题?

【问题讨论】:

  • 里面的函数$scope.apply被调用了吗?
  • 这不是一个函数,我只是将$scope.photo 设置为等于来自 HTTP 调用的响应。
  • $scope.apply 的参数是一个函数。这个函数被调用了吗?你检查了吗?
  • 我更新了,如何让它刷新ng-src?
  • 您的意思是src指向的内容发生了变化,但URL保持不变,您要强制它重新读取URL?

标签: javascript angularjs


【解决方案1】:

您的意思是src指向的内容发生了变化,但URL保持不变,您想强制它重新读取URL吗?如果是这样,那么您可以在 URL 中添加一个 tmestamp 并更新时间戳以使其更改 URL。

您还可以将 src 设置为带有图像而不是 URL 的 base64 编码字符串。

【讨论】:

  • 如果我在另一个地方有图像(我想更新),但它在不同的控制器内怎么办?我有哪些选择?
  • 我不明白你的意思。听起来您可能需要在所有这些控制器中使用服务。
  • 它在模态中更新,我希望它在页面上的其他任何地方更新。
  • 提供服务。服务是一个单例对象。将服务注入对它感兴趣的所有内容。将图像源放入服务中。使这项服务保持形象。从服务中公开图像并让对此图像感兴趣的任何人观看它。这有意义吗?
  • 我明白了,但是它会为相同的数据发送多个 HTTP 请求。
猜你喜欢
  • 2015-03-14
  • 2014-11-08
  • 1970-01-01
  • 2014-04-01
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多