Vu3.x如何给v-for循环出来的输入框绑定v-mode的值,以及实现父子组件传值、双向绑定
观前须知:本人演示使用的input是自己手敲的,如果使用的是element-ui等表单组建的input框请选择性参考,不保证我的方法对你们也完全有效。
父组件代码:
这里我的MiniInput是以组件形式引入的父页面 (这里只贴关键代码)
<template>
<div>
<MiniInput
v-for="item in titleArray"
:key="item.id"
>
<template #miniTitle> {{ item.name }} </template>
</MiniInput>
</div>
</template>
<script setup lang="ts">
import { Ref, ref } from 'vue'
import MiniInput from '../components/MiniInput.vue'
//用ref包裹数组,方便后期实现双向绑定
const titleArray: Ref<Array<TitleArray>> = ref([
{
name: 'Exclude content',
id: 1231,
textVal: ''
},
{
name: 'Federated content',
id: 1232,
textVal: ''
},
{
name: 'Optional retrieval',
id: 1233,
textVal: ''
},
])
</script>
子组件代码:
<template>
<div class="from__input__mini">
<span class="mini-title">
<slot name="miniTitle"></slot>
</span>
<input class="mini-input" type="text" />
</div>
</template>
<script setup lang="ts">
</script>
上述代码可以得到以下界面效果,这是我们只完成了表面工作(请忽略样式)

下面开始正题:
首先,我们要打通父子组件的隔阂,先将父组件的textVal传递给子组件,这里我们需要使用到v-mode语法,将我们先前定义好的数组内的textVal属性传递过去。
<!-- 下面新增了一行 v-mode -->
<MiniInput
v-model:textVal="item.textVal"
v-for="item in titleArray"
:key="item.id"
>
<template #miniTitle> {{ item.name }} </template>
</MiniInput>
随后我们来到子组件,为接收父组件传递过来的值做准备
<script setup lang="ts">
// defineProps 用于接收父组件传递过来的参数
defineProps<{
textVal: string
}>()
</script>
此时我们就可以给子组件绑定父组件传递过来的参数了
<template>
<div class="from__input__mini">
<span class="mini-title">
<slot name="miniTitle"></slot>
</span>
<input :value="textVal" class="mini-input" type="text" />
</div>
</template>
<script setup lang="ts">
// defineProps 用于接收父组件传递过来的参数
defineProps<{
textVal: string
}>()
</script>
实现双向绑定
但是此时我们会发现,到目前为止我们也仅仅只是接受了父组件传递过来的参数,此时我们去输入框改变内容时,并不会同时改变父组件中的值,那么此时我们就要想办法实现数据流的 双向绑定
要实现双向数据响应,首先子组件要使用 defineEmits 接受父组件传递过来的 textVal 的 update 函数,随后我们给输入框添加一个input事件,目的是监听输入内容随后改变父组件中的对应属性。
<template>
<div class="from__input__mini">
<span class="mini-title">
<slot name="miniTitle"></slot>
</span>
<input :value="textVal" @input="changeText" class="mini-input" type="text" />
</div>
</template>
<script setup lang="ts">
// defineProps 用于接收父组件传递过来的参数
defineProps<{
textVal: string
}>()
// 要实现双向数据响应要使用 defineEmits 接受父组件传递过来的 textVal 的 update函数
const emit = defineEmits(['update:textVal'])
// 输入框input事件
const changeText = (e: Event) => {
// 这里因为ts自动类型推断会把变量推断为EventTarget,导致没办法读取到.value属性,所以要进行一个类型断言
const target = e.target as HTMLInputElement
emit('update:textVal', target.value)
}
</script>
这时我们就可以回到父组件中,为父组件的数组添加一个监听事件:
// 这里是父组件的script
<script setup lang="ts">
import { Ref, ref, watch } from 'vue'
...
...
...
// 监听数组
watch
titleArray,
() => {
console.log('数组变化了')
},
{
deep: true
}
)
</script>
随后进行测试

可以看到,虽然是通过循环生成的三个子组件(input),但是它们各自都实现了双向数据绑定以及数据监听,至此,效果实现,本博客仅用于开发过程中的记录以及复盘,仅供参考!
Vu3.x如何给v-for循环出来的输入框绑定v-mode的值,以及实现父子组件传值、双向绑定的更多相关文章
- CF E. Vasya and a Tree】 dfs+树状数组(给你一棵n个节点的树,每个点有一个权值,初始全为0,m次操作,每次三个数(v, d, x)表示只考虑以v为根的子树,将所有与v点距离小于等于d的点权值全部加上x,求所有操作完毕后,所有节点的值)
题意: 给你一棵n个节点的树,每个点有一个权值,初始全为0,m次操作,每次三个数(v, d, x)表示只考虑以v为根的子树,将所有与v点距离小于等于d的点权值全部加上x,求所有操作完毕后,所有节点的值 ...
- vue+node.js+webpack开发微信公众号功能填坑——v -for循环
页面整体框架实现,实现小功能,循环出数据,整体代码是上一篇 vue+node.js+webpack开发微信公众号功能填坑--组件按需引入 修改部门代码 app.vue <yd-flexbox&g ...
- 利用闭包解决for循环里onclick事件不能捕捉实时i值问题
问题描述 我们都知道,如果我们对于一组元素(相同的标签)同时进行onclick事件处理的时候(在需要获取到索引的时候),一般是写一个for循环,但是onclick是一个异步调用的,所以会带来一个问题, ...
- 用jquery循环获得所有input标签里的value值
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- js循环里进行回调,引用循环里的变量,发现只是最后值的问题
做项目的时候,栽在一个小地方,是这样的 我有很多个坐标点,我想把这些坐标点都绑定一个事件,当点击了这个坐标点之后,发送一个ajax 请求,将坐标点的id 发出去,等待显示返回的数据 但是实际当中,无论 ...
- 39.VUE学习--组件,子组件中data数据的使用,x-template模板的使用,改变for循环里的某条数据里的值
多处引用相同组件时,操作data不会相互影响 <!DOCTYPE html> <html> <head> <meta charset="utf-8& ...
- Mybatis-Plus的Service方法使用 之 泛型方法default <V> List<V> listObjs(Function<? super Object, V> mapper)
首先 我们先看到的这个方法入参是:Function<? super Object , V> mapper ,这是jdk1.8为了统一简化书写格式引进的函数式接口 . 简单 解释一下我对Fu ...
- Python3基础 dict keys+values 循环打印字典中的所有键和值
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- 多层v-for循环嵌套导致v-model双向绑定失败,页面不重新渲染
数据格式是数组包对象,对象里面再包数组,数组再包对象,如下: 外层for遍历出editInfo里面所有的属性,内层for遍历Options. 最终实现样子 两个问题: 1.点加减按钮的时候往optio ...
随机推荐
- 清北学堂 2020 国庆J2考前综合强化 Day5
目录 1. 题目 T1 a 题目描述 Sol T2 b 题目描述 Sol T3 c 题目描述 Sol T4 d 题目描述 Sol 2. 算法 - 贪心 & 数学 1. 贪心 2. 数学 2.1 ...
- Spring 01 概述
简介 Spring 是开源的轻量级 J2EE 框架 我们常说的 Spring 实际上是指 Spring Framework,它是 Spring 家族中的一个重要分支. 官方文档 https://doc ...
- 如何保证遍历parent的时候的task的存在性
在一次crash的排查过程中,有这么一个内核模块,他需要往上遍历父进程, 但是在拿父进程task_struct中的一个成员的时候,发现为NULL了, 具体查看父进程,原来它收到信号退出中. 那么怎么保 ...
- 我用开天平台做了一个字符串检查API,hin 简单~~
摘要:本文使用了工作台的API全生命周期管理和函数管理功能,编写字符串检查的函数,实现了API的快速创建和发布. 本文分享自华为云社区<[我用开天平台做了一个字符串检查API>,作者:人类 ...
- CCF NOI Online 2021 提高组 赛后心得
T1 做个,不会,拿到 20 pts 跑路. 注意后面有个 K = 1 的部分分,这个可以递推求 b 的个数,然后直接乘上 a0 . 官方正解讲得极其详细,我还是第一次见到可以 O(K2) 做 1~n ...
- 【MySQL】从入门到精通6-MySQL数据类型与官方文档
上期:[MySQL]从入门到精通5-一对多-外键 这个是官方文档链接,是世界上最全面的MySQL教学了,所有问题都可以在这里找到解决方法. https://dev.mysql.com/doc/ htt ...
- 【java】学习路线2-构造、Scanner包导入、字符串操作、数组、引用类型
请先查看前置知识: [JAVA]基础1-字符串.堆.栈.静态与引用类型 https://www.cnblogs.com/remyuu/p/15990274.html import java.util. ...
- Linux安装Jenkins及配置svn使用
目录 1. 下载 2. 创建文件夹 3. 安装 4. 修改端口,不用这步 5. 安装插件提速 6. 启动 7. 页面访问 8. 新建用户 9. 安装Subversion插件 10. 安装maven插件 ...
- Java控制台打印三角形
for (int i = 1; i <= 5; i++) { //最上面先是五个往下一次4.3.2.1 for (int j = 5; j >= i; j--) { System.out. ...
- 第四篇:理解vue代码
解释以下代码: 实现输入框中能够打字的功能 <el-input v-model="input" placeholder="在这打字"></el ...