VUE3 v-model数据双向绑定及原理

v-model写法

<input type="text" v-model="mag">
  <div>{
    
    {
    
    mag}}</div>
data(){
    
    
        return {
    
    
            mag:'HELLO WORLD'
        }
    },

v-model原理

分为两步
1、v-bind绑定value属性
2、v-on绑定input事件

  <div>{
    
    {
    
    mag}}</div>
  <input type="text" :value="mag" @input="change">
data(){
    
    
        return {
    
    
            mag:'HELLO WORLD'
        }
    },
    methods:{
    
    
        change(e){
    
    
            this.mag = e.target.value   
            console.log(e)
        }
    }

v-model复选框 (Checkbox)

单个勾选

  <input type="checkbox" id="checkbox" v-model="checked" />
  <label for="checkbox">{
    
    {
    
     checked }}</label>
data(){
    
    
        return {
    
    
            checked:true,
        }
    },

多个勾选 (用数组接收)

  <input type="checkbox" value="小明" v-model="checkedNames" />
  <label for="小明">小明</label>
  <input type="checkbox" value="小李" v-model="checkedNames" />
  <label for="小李">小李</label>
  <input type="checkbox" value="小陈" v-model="checkedNames" />
  <label for="小陈">小陈</label>
data(){
    
    
        return {
    
    
            checkedNames:[]
        }
    },

v-model单选框 (radio)

  <input type="radio" value="One" v-model="picked" />
  <label for="one">One</label>
  <br />
  <input type="radio" value="Two" v-model="picked" />
  <label for="two">Two</label>
  <br />
  <span>Picked: {
    
    {
    
     picked }}</span>
data(){
    
    
        return {
    
    
            picked:''
        }
    },

v-model选择框 (Select)

单选

  <select v-model="selected">
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
  </select>
  <span>Selected: {
    
    {
    
     selected }}</span>
data(){
    
    
        return {
    
    
            selected:'2',
        }
    },

多选

<select v-model="selecteds" multiple>
    <option value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
  </select>
  <span>Selected: {
    
    {
    
     selecteds }}</span>
data(){
    
    
        return {
    
    
            selecteds:[]
        }
    },

修饰符

.lazy

在默认情况下v-model实时更新的,如果不想让他实时更新需添加.lazy修饰符,作用是在事件失去焦点时才会更新

<input v-model.lazy="mag" />
data(){
    
    
        return {
    
    
            mag:'mag'
        }
    },

.number

如果想自动将用户的输入值转为数值类型,可以给 v-model 添加 number 修饰符

<input v-model.number="age" type="text" />

.trim

如果要自动过滤用户输入的首尾空白字符,可以给 v-model 添加 trim 修饰符:

<input v-model.trim="msg" />

猜你喜欢

转载自blog.csdn.net/weixin_46730573/article/details/125836760