video动态绑定src未触发vue的渲染
来源:8-7 文件上传组件的使用

纳兰汐枫
2020-05-07
1. 问题
视频上传成功后,对section.video
赋值,未触发视频标签的显示,需要手动更改一下其他的表单值,视频才会刷新出来。
但看老师的视频,只要上传成功,为section.video
赋值后,视频是立即自动加载出来的。不知这属于什么情况,该怎样处理呢?
2. 相关版本
- @vue/cli 4.3.1
- Chrome版本 80.0.3987.149(正式版本) (64 位)
- Firefox 75
两个浏览器均存在该问题。
3. 相关代码:
3.1 section.vue
3.1.1 html
<!-- ... -->
<div class="form-group">
<label class="col-sm-2 control-label">视频</label>
<div class="col-sm-10">
<file v-bind:input-id="'video-upload'" v-bind:text="'上传大视频'"
v-bind:suffixs="['mp4']"
v-bind:use="FILE_USE.COURSE.key"
v-bind:after-upload="afterUpload">
</file>
<div v-show="section.video" class="row">
<div class="col-md-9">
<video v-bind:src="section.video" id="video" controls="controls"></video>
</div>
</div>
</div>
</div>
<!-- ... -->
3.1.2 JS
// ...
data: function() {
return {
section: {},
sections: [],
SECTION_CHARGE: SECTION_CHARGE,
course: {},
chapter: {},
FILE_USE: FILE_USE,
}
},
// ...
afterUpload(resp) {
let _this = this;
console.log("_this", _this);
let video = process.env.VUE_APP_FILE_SERVER + resp.content.path;
_this.section.video = video;
console.log(" _this.section.video", _this.section.video);
_this.getTime();
},
getTime() {
let _this = this;
let ele = document.getElementById("video");
console.log("ele",ele);
_this.section.time = parseInt(ele.duration, 10);
},
3.2 file.vue
uploadFile() {
// ...
_this.$ajax.post(process.env.VUE_APP_SERVER + "/file/admin/upload", formData).then((res)=> {
Loading.hide();
let resp = res.data;
console.log("文件上传的结果:", resp);
_this.afterUpload(resp);
$("#" + _this.inputId + "-input").val("");
});
// ...
}
4. 相关图片
4.1 动图演示
4.2 静图说明
与动图不是同一次上传截取,打印出来的地址不同,仅用作说明
写回答
1回答
-
这个问题有个别同学也有反馈,值有了,但是没有渲染到界面上。
这个问题常见于前端框架+jquery插件一起使用时。比如vue或angular框架中使用了jquery日期插件或树型插件或其它插件,就会出现这种赋值了,但是界面没体现出来。不排除有其它原因也会出现这种情况。
可以用这个方法解决:把这句_this.section.video=video换成_this.$set(_this.section, 'video', video)
112020-05-07
相似问题