Closed xiamibuchi closed 2 years ago
遇到同样问题
@xiamibuchi @yaoshuaibing 原因是 video 组件的 muted 属性会被编译为 domProps,这样会以 DOM property 的形式而不是 attribtue 的形式去设置该值。
可以看到编译结果,muted
被编译为 domProps:
var render = function() {
var _vm = this
var _h = _vm.$createElement
var _c = _vm._self._c || _h
return _c("view", { staticClass: "index" }, [
_c("video", {
ref: "video",
attrs: { src: "https://media.w3.org/2010/05/sintel/trailer.mp4" },
domProps: { muted: _vm.muted }
}),
_c("button", { on: { tap: _vm.changeMuted } }, [_vm._v(" 切换静音 ")]),
_c("view", [_vm._v("当前" + _vm._s(_vm.muted ? "已" : "未") + "静音")])
])
}
再顺着 Vue template compiler 的源码往下看,可以发现有一个配置项名为 mustUseProp
,该配置默认会把以下组件的特定属性作为 domProps。
// node_modules/vue-template-compiler/build.js
var mustUseProp = function (tag, type, attr) {
return (
(attr === 'value' && acceptValue(tag)) && type !== 'button' ||
(attr === 'selected' && tag === 'option') ||
(attr === 'checked' && tag === 'input') ||
(attr === 'muted' && tag === 'video')
)
};
因此 Taro 需要传入自定义的 mustUseProp
配置:
mustUseProp: function () {
return false
}
相关平台
微信小程序
复现仓库
https://github.com/xiamibuchi/taro-demo 小程序基础库: 2.17.0 使用框架: Vue 2
复现步骤
对 video 标签设置 :muted="muted",muted 初始值为 true,video 播放时未静音,并且切换 muted 的值时 video 的静音状态也未改变。必须用 ref 获取 video,用 setAttribute 才能成功生效
期望结果
修改 muted 时,video 的静音状态跟随改变
实际结果
video 的静音状态没有跟随改变
环境信息