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

Vue数据已变更但视图未更新求助:embedData控制台有值但页面渲染为空

解决你的Vue EventBus数据绑定问题

嘿,我一眼就揪出问题核心啦!你在mounted钩子中注册EventBus回调时用了普通函数,导致**this的上下文完全不对**——这里的this指向的是回调函数本身,而非你的Vue组件实例,所以你给this.embedData赋值根本没更新到组件的data属性里,视图自然就显示为空了。

两种快速修复方案

方案1:用箭头函数继承组件上下文

箭头函数会自动继承父级作用域的this(也就是你的组件实例),修改后的代码如下:

mounted: function() {
  EventBus.$on('HTML', (payLoad) => {
    this.embedData = payLoad
    console.log('payLoad:' + this.embedData);
    console.log('arrived');
  });
}

方案2:用bind(this)手动绑定上下文

如果你更习惯用普通函数,可以手动把this绑定到组件实例上:

mounted: function() {
  EventBus.$on('HTML', function (payLoad) {
    this.embedData = payLoad
    console.log('payLoad:' + this.embedData);
    console.log('arrived');
  }.bind(this));
}

额外重要提醒:渲染HTML内容需用v-html

你拿到的payLoad是HTML字符串(iframe标签),如果直接用{{embedData}}只会渲染成纯文本,不会解析成实际的视频播放器。要正确渲染HTML,需要把模板里的{{embedData}}改成:

<div v-html="embedData"></div>

另外还有个小冗余点:你在oEmbed组件的mounted里也重复注册了HTML事件的监听,这会导致同一事件被多次触发,建议把oEmbed里的这段监听代码删掉,只在父组件里处理就好啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 10:12:39