v-html
指令display: flex
。注意:当v-bind:style
使用需要特定前缀的CSS属性时,如transform
,Vue.js会自动侦测并添加相应的前缀。
上述已经提到<input v-model="message">
实现所谓的双向,不过是<input v-bind:value='message' v-on:input="message = arguments[0]"
的语法糖。v-model
会忽略所有表单元素的 value
、checked
、selected
特性的初始值。因为它会选择 Vue 实例数据来作为具体的值。
多个勾选框,绑定到同一个数组:
<div id='example'>
<input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
<label for="jack">Jack</label>
<input type="checkbox" id="john" value="John" v-model="checkedNames">
<label for="john">John</label>
<input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
<label for="mike">Mike</label>
<p>Checked names: {{ checkedNames }}</p>
</div>
<script>
new Vue({
el: '#example',
data: {
checkedNames: []
}
})
</script>
<div id="example">
<input type="radio" id="one" value="One" v-model="picked">
<label for="one">One</label>
<br>
<input type="radio" id="two" value="Two" v-model="picked">
<label for="two">Two</label>
<p>Picked: {{ picked }}</p>
</div>
<script>
new Vue({
el: '#example',
data: {
picked: ''
}
})
</script>
<div id="example-5">
<select v-model="selected">
<option disabled value="">请选择</option>
<option>A</option>
<option>B</option>
<option>C</option>
</select>
<span>Selected: {{ selected }}</span>
</div>
如果 v-model
表达初始的值不匹配任何的选项,<select>
元素就会以”未选中”的状态渲染。在 iOS 中,这会使用户无法选择第一个选项,因为这样的情况下,iOS 不会引发 change 事件。因此,像以上提供 disabled 选项是建议的做法。
对于单选按钮,勾选框及选择列表选项, v-model
绑定的 value 通常是静态字符串(对于勾选框是逻辑值):但是有时我们想绑定 value 到 Vue 实例的一个动态属性上,这时可以用 v-bind
实现,并且这个属性的值可以不是字符串。
<!-- 复选框 -->
<input type="checkbox" v-model="toggle" :true-value="trueVal" :false-value="falseVal">
<!-- 单选框 -->
<input type="radio" v-model="pick" v-bind:value="value">
<!-- 列表 -->
<select v-model="selected">
<!-- 内联对象字面量 -->
<option v-bind:value="{ number: 123 }">123</option>
</select>
<script>
const app = new Vue({
el: '#app',
data() {
return {
// 选中为'yes' 未选中为'false'
toggle: '',
trueVal: 'yes',
falseVal: 'no',
// 选中为'yes'
pick: '',
value: 'yes',
// 为对象
selected: '',
}
}
})
</script>
技巧: select组件都会提供label和value两个值,供使用者对展示和赋值进行分别设置,这里可以对value赋值整个对象,便于后续操作,单展示上不受任何影响!这在一些获取选中值做后续条件的时候很有用。
<el-select v-model="value" multiple placeholder="请选择">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item">
</el-option>
</el-select>
.lazy
:添加该修饰符,从而转变为在 change
事件中同步,而非input
事件!请查看: change和input区别.number
:将用户的输入值转为 Number 类型.trim
:自动过滤用户输入的首尾空格<div id="app">
<!-- v-bind -->
<my-component value="123"></my-component>
<my-component :value="123"></my-component>
<!-- v-model.lazy -->
<input type="text" v-model.lazy="value2"><span>{{value2}}</span>
<!-- v-model.number -->
<input type="text" v-model="value3"><span>{{typeof value3}}</span>
<input type="text" v-model.number="value4"><span>{{typeof value4}}</span>
</div>
说明:第一个<my-component>
组件的value值为string类型;第二个<my-component>
组件的value值为number类型;value2添加了.lazy修饰符,在用户输入值得过程中(input事件)并不会发生改变,失去焦点(change)才触发改变;value3,value4初始类型取决于vue实例中data值得类型,但在用户输入过程中,value4会做类型转换,转换为Number类型。
完整示例参考地址:https://jsfiddle.net/381510688/7oe7LLtm/