v-model用于在元素上创建双向数据绑定,负责监听用户输入事件来更新数据。

v-model应用于输入框

<input v-model="searchText" />
// 等价于
<input :value="searchText" @input="searchText = $event.target.value" />

v-model应用于自定义组件

v-mode用在组件上时,类似与用于input输入框

<customComp v-model="searchText" />
// 等价于
<customComp :model-value="searchText" @update:model-value="searchText = $event" />

为了能让组件上的v-model生效,

  1. 需要将这个组件中的某个元素的某个属性绑定到名为modelValue的prop上(从父组件传来的值)
  2. 在该元素的某个事件触发时,将新的值通过自定义的update:modelValue事件抛出。

这里以input元素为例:假设自定义组件中包含一个input元素,代码如下:

// 子组件
app.component('customComp', {
props: ['modelValue'],
emits: ['update:modelValue'],
template:
<input :value="modelValue"
@input="$emit('update:modelValue', $event.target.value)">
})
// 父组件
<customComp v-model="searchText" />

这样 组件上的v-model指令就能生效。原理还是通过数据绑定和事件触发,写法直接可以在组件中使用v-model指令,但组件内要写出相关传值与事件触发代码。

其他示例:

父组件:

<bindMapComp v-model="childrenDrawer" />

子组件:这里绑定的是 ant-design 中 a-drawer元素的visble属性

<template>
<a-drawer
title=""
placement="left"
width="320"
:closable="false"
:visible="modelValue"
@close="onChildrenDrawerClose"
>
测试
</a-drawer>
</template>
<script>
export default {
props: {
modelValue: {
type: Boolean,
},
},
emits: ['update:modelValue'],
setup(_, { emit }) {
const onChildrenDrawerClose = () => {
// 子组件通过emit事件,向父组件传值
emit('update:modelValue', false);
};
return {
onChildrenDrawerClose,
};
},
};
</script>

如不理解可查阅vue官方文档:https://v3.cn.vuejs.org/guide/component-basics.html#%E5%9C%A8%E7%BB%84%E4%BB%B6%E4%B8%8A%E4%BD%BF%E7%94%A8-v-model(vue官方文档写的很好,建议反复阅读,vue的所有知识点官方文档解释讲解的应该是最好的)

最新文章

  1. springMVC中实现servlet依赖注入
  2. 【笔记】ListView的使用
  3. 探索软件工程道路上的我 V (Θ∀Θ#)
  4. Javascript——DOM
  5. Android 一步步教你从ActionBar迁移到ToolBar
  6. Codeforces Round #232 (Div. 2) B. On Corruption and Numbers
  7. Cocos2d提供的字体(图文并茂)
  8. JavaWeb学习笔记之JSP(一)
  9. VS环境下的makefile编译
  10. 未能载入文件或程序集“DAL”或它的某一个依赖项。系统找不到指定的文件。
  11. java基础之反射
  12. php 解析url 和parse_url使用
  13. SVN常见问题总结一
  14. 【C#】await &amp; Result DeadLock
  15. Promise是什么?
  16. Unity中调用DLL库
  17. Python数据分析Numpy库方法简介(三)
  18. ReLu、LeakyRelu、PReLu(转载)
  19. 使用google guava做内存缓存
  20. SyntaxError: Non-UTF-8 code starting with &#39;\xe5&#39; in file ***.py on line 105, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for

热门文章

  1. 【C# Parallel】ParallelLoopState
  2. JabRef:将bibtex格式的参考文献导入EndNote的转换软件
  3. Java开发名词解释
  4. ts转js运行报错:“tsc : 无法加载文件
  5. UML类图的补充及软件设计原则
  6. LeetCode-086-分隔链表
  7. 微信小程序 地区选择器 和省市县三级联动 和button按钮分享
  8. C/C++语言读取SEGY文件笔记(一)
  9. 使用Python 模拟RSA 加密与解密
  10. Java案例——简单登录