You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用vue-image-lightbox实现轮播图图片src动态修改的问题咨询

你出现这个问题的核心原因是:
data 初始化时,media 数组里的 src 和 thumb 是直接读取当时的 this.post_main_image_url 的值(空字符串),由于字符串是基础类型,赋值时是值拷贝而非引用传递。后续你修改 post_main_image_url 时,media 数组里的对应属性不会自动同步更新,所以组件拿到的始终是初始的空值,显示为 undefined。

最优解决方法:把 media 改为计算属性

利用 Vue 的响应式依赖机制,post_main_image_url 变化时 media 会自动更新,无需手动赋值:

export default {
  name: 'lightbox',
  components: {
    ImageLightBox,
  },
  data() {
    return {
      post: {
        // 提前声明属性避免响应式丢失
        main_image_url: ''
      },
      post_main_image_url: '',
    }
  },
  computed: {
    media() {
      return [
        {
          thumb: this.post_main_image_url,
          src: this.post_main_image_url,
          title: '朝日が昇る摩周湖(北海道川上郡弟子屈町)',
        }
      ]
    }
  },
  methods: {
    show: function(index){
      this.$refs.lightbox.showImage(index)
    },
    getData() {
      this.$loading.load(
          this.$auth.api.get(
              'posts/' + this.post_id, {
                params: {}
              }
          ).then(res => {
            this.post = res.data.post;
            this.post_main_image_url = String(res.data.post.main_image_url)
          }).catch(err => {
            this.$errorHandlers.initial(err);
          })
      )
    }
  },
  created() {
    this.getData();
  },
}

替代方案:手动更新media

如果你不想改动原有 data 结构,也可以在接口拿到返回值后手动修改 media 的属性:

// 在 getData 的 then 回调中,赋值 post_main_image_url 后新增两行代码
this.post_main_image_url = stringMainImageUrl
this.media[0].src = this.post_main_image_url
this.media[0].thumb = this.post_main_image_url

内容的提问来源于stack exchange,提问作者katahik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:39:02