Vue3中v-model在原生元素和自定义组件上的使用

这篇具有很好参考价值的文章主要介绍了Vue3中v-model在原生元素和自定义组件上的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

一、原生元素上的用法

1. 输入框(input)

2. 多行文本域(textarea)

3. 单选按钮(radio)

4. 多选框(checkbox) 

5. 下拉选择框(select) 

二、自定义组件上的用法

1. 定义一个名为 modelValue 的 props 属性和一个名为 update:modelValue 的事件

2.使用一个可写的,同时具有 getter 和 setter 的 computed 属性

三、v-model修饰符

1. lazy 修饰符

2. number 修饰符

四、注意事项


前言

v-model 是 Vue 框架中用于实现双向数据绑定的指令之一,在 Vue 3 中保留了这一特性,并对其进行了一些改进。Vue 3 的 v-model 指令更加灵活,可以适用于原生 HTML 元素和自定义组件,并支持修饰符的使用。

一、原生元素上的用法

在 Vue 3 中,我们可以通过 v-model 在原生 HTML 元素上实现双向数据绑定。v-model 可以应用于 input、textarea 和 select 等表单元素。

1. 输入框(input)

在Vue 3中,可以通过v-model指令实现对输入框的双向绑定。

<template>
  <div>
    <input v-model="message" type="text">
    <p>Message: {{ message }}</p>
  </div>
</template>

<script setup>
import { ref } from 'vue'

const message = ref('')
</script>

2. 多行文本域(textarea)

<template>
  <div>
    <textarea v-model="message"></textarea>
    <p>Message: {{ message }}</p>
  </div>
</template>

<script setup>
import { ref } from 'vue'

const message = ref('')
</script>

3. 单选按钮(radio)

 对于单选按钮,我们可以通过v-model指令绑定同一个name属性,将其与一个变量进行关联。

<template>
  <div>
    <input type="radio" id="option1" value="option1" v-model="selectedOption">
    <label for="option1">Option 1</label>

    <input type="radio" id="option2" value="option2" v-model="selectedOption">
    <label for="option2">Option 2</label>

    <p>Selected Option: {{ selectedOption }}</p>
  </div>
</template>

<script setup>
import { ref } from 'vue'

const selectedOption = ref('')
</script>

在上面的代码中,我们使用v-model指令绑定了两个单选按钮,并通过selectedOption变量进行双向数据绑定。用户选择其中一个选项时,selectedOption变量会更新,并且变化会实时反映在页面上。

4. 多选框(checkbox) 

<template>
  <div>
    <input type="checkbox" id="option1" value="option1" v-model="selectedOptions">
    <label for="option1">Option 1</label>

    <input type="checkbox" id="option2" value="option2" v-model="selectedOptions">
    <label for="option2">Option 2</label>

    <p>Selected Options: {{ selectedOptions }}</p>
  </div>
</template>

<script setup>
import { ref } from 'vue'

const selectedOptions = ref([])
</script>

在这个例子中,我们使用v-model指令绑定了两个多选框,并通过selectedOptions变量进行双向数据绑定。当用户选择或取消选择其中一个多选框时,selectedOptions变量会相应地更新,并且变化会实时反映在页面上。

注意:对于多选框,使用v-model进行绑定的变量应该是一个数组类型,用于保存选中的多个选项的值。

5. 下拉选择框(select) 

<template>
  <div>
    <select v-model="selectedOption">
      <option value="option1">Option 1</option>
      <option value="option2">Option 2</option>
    </select>

    <p>Selected Option: {{ selectedOption }}</p>
  </div>
</template>

<script setup>
import { ref } from 'vue'

const selectedOption = ref('')
</script>

二、自定义组件上的用法

除了原生 HTML 元素,Vue 3 中的 v-model 还可以在自定义组件中使用。需要注意的是,自定义组件上使用v-model需要遵循一些规则。实现的方式有两种。

默认情况下,v-model 在组件上都是使用 modelValue 作为 prop,并以 update:modelValue 作为对应的事件。

1. 定义一个名为 modelValue 的 props 属性和一个名为 update:modelValue 的事件

父组件:v-model将message变量与该组件进行双向绑定

<template>
  <div>
    <child-component v-model="message"></child-component>
    <p>父组件:Message: {{ message }}</p>
  </div>
</template>

<script setup>
  import { ref } from 'vue'

  const message = ref('')
</script>

自定义组件:v-model默认绑定的不是value,而是modelValue。发射的方法固定位为@update:modelValue。

<template>
  <div>
    子组件
    <input :value="modelValue" @input="$emit('update:modelValue', $event.target.value)" />
  </div>
</template>

<script setup>
  defineProps({
    modelValue: {
      type: String
    }
  })
  defineEmits(['update:modelValue'])
</script>

在自定义组件的模板中,我们使用:value来绑定输入框的值,并通过@input监听输入事件。同时,使用$emit函数触发update:modelValue事件,将输入框的新值传递给父组件。

通过使用props和事件,我们可以实现自定义组件上类似于原生表单元素的双向绑定效果。

Vue3中v-model在原生元素和自定义组件上的使用,vue,vue.js,javascript,前端

 

2.使用一个可写的,同时具有 getter 和 setter 的 computed 属性

父组件:同上

自定义组件:get 方法需返回 modelValue prop,而 set 方法需触发相应的事件。

<template>
  <div>
    子组件
    <input :value="modelValue" @input="$emit('update:modelValue', $event.target.value)" />
  </div>
</template>

<script setup>
  import { computed } from 'vue'

  const props = defineProps({
    modelValue: {
      type: String
    }
  })
  defineEmits(['update:modelValue'])

  computed({
    get() {
      return props.modelValue
    },
    set(value) {
      emit('update:modelValue', value)
    }
  })
</script>

三、v-model修饰符

除了基本的双向绑定外,Vue 3 的 v-model 还支持多种修饰符。常用的修饰符有 .lazy.number

1. lazy 修饰符

.lazy 修饰符可以使输入框的值在失去焦点时才进行更新。例如:

<template>
  <div>
    <input type="text" v-model.lazy="message">
    <p>{{ message }}</p>
  </div>
</template>

<script setup>
import { ref } from 'vue'

const message = ref('Hello, Vue 3!')

</script>

2. number 修饰符

.number 修饰符可以将输入框的值转换为数值类型。例如:

<template>
  <div>
    <input type="text" v-model.number="count">
    <p>Count: {{ count }}</p>
  </div>
</template>

<script setup>
import { ref } from 'vue'

const count = ref(0)

</script>

四、注意事项

1. 不是所有的原生元素都能直接使用 v-model。例如,<button> 元素不能直接使用 v-model 来实现双向绑定,但可以使用其他的事件和方法来进行状态管理和更新。

2. 在自定义组件中修改modelValue的值时,应当使用响应式的refreactive变量。文章来源地址https://www.toymoban.com/news/detail-634820.html

到了这里,关于Vue3中v-model在原生元素和自定义组件上的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包