Vue.js 绑定响应式样式对象 px 参数

Vue.js bind reactive style object px params

我正在尝试从范围输入中对样式 HTML 元素进行响应式更改,但是 px[=18= 样式参数字体大小、高度、宽度等存在问题]

<span v-bind:style="myobj.css">Hi all</span>

var vm = new Vue({
    el: '#app', 
    data: {
        myobj: {
            css: {
                color: '#999999',
                fontSize: '18',
            }
        }
    }
})
<input v-model="myobj.css.fontSize" type="range" min="10" max="32" step="1">

但需要 - “字体大小:18px,我该怎么做?我尝试使用过滤器,但不适用于 obj

您可以为您的 v 模型使用计算的 属性:

computed: {
  fontSize: {
    get() {
      const fontPx = /(<?value>\d+(?:\.\d+)?)px/

      if (!fontPx.test(newValue))
        return 0
      
      const { groups: { value } } = newValue.match(fontPx)
      return value
    },
    set(newValue) {
      this.myobj.css.fontsize = newValue + 'px'
    }
  }
}

并在您的模板中:

<input v-model="fontSize" type="range" min="10" max="32" step="1">

编辑 - 我刚刚重新阅读了您的问题。我让 getset 翻转过来。编辑后的答案应该可以满足您的需要。

或者,您可以使用经过计算的 属性 作为样式:

computed: {
  style() {
    const style = { ...this.myobj.css }
    style.fontsize = style.fontsize + 'px'
    
    return style
  }
}
<span v-bind:style="style">Hi all</span>