IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue3:v-model、自定义修饰符 -> 正文阅读

[JavaScript知识库]Vue3:v-model、自定义修饰符

一、单向数据流

vue是单向数据流的,所以v-model其实是破坏性的

v-model是一个语法糖:

  • 在vue2中v-model是input(根据表单类型决定)事件和value的结合;
  • 在vue3中v-model是props和emit的结合

二、使用案例

v-model默认绑定的事件是'update:modelValue',默认绑定的数据是modelValue

效果:

?

父组件:

<template>
  <div class="parent">
    <div>我是父组件</div>
    <el-button @click="changeName">我不同意你改</el-button>
    <div>我有{{money}}万元,败家儿子和我一块花</div>
    <Child v-model:money="money" v-model="name"></Child>
  </div>
</template>
<script setup lang="ts">
import Child from './child.vue';
const name = ref<string>('法外狂徒-张三');
const money = ref<number>(100);
const changeName = ()=>{
  name.value = '法外狂徒-张三';
}
</script>
<style scoped lang="less">
.parent {
  width: 500px;
  padding: 10px;
  background-color: aquamarine;

}
</style>

子组件:

<template lang="">
  <div class="child">
    <div>我是子组件</div>
    <div>父亲起的名字:{{modelValue}}</div>
    <el-button @click="changName">户籍室改名字</el-button>
    <el-button @click="consume">花老爹的钱寻开心</el-button>
  </div>
</template>
<script setup lang="ts">
type Props = {
  modelValue: string,
  money: number
};
const parentData = defineProps<Props>();
let childMoney = parentData.money;

const emit = defineEmits(['update:modelValue','update:money']);

const consume=()=>{
  emit('update:money', --childMoney)
}

const changName = () => {
  emit('update:modelValue', '尼古拉斯-赵四')
};
</script>
<style scoped lang="less">
.child {
  padding: 20px;
  background-color: bisque;
}
</style>

三、自定义修饰符

添加到组件?v-model?的修饰符将通过?modelModifiers?prop 提供给组件。

改造父组件:

<Child v-model:money.myModifier="money" v-model="name"></Child>

改造子组件

<script setup lang="ts">
type Props = {
  modelValue: string,
  money: number,
  moneyModifiers?: {
    myModifier: boolean
  }
};
const parentData = defineProps<Props>();
let childMoney = parentData.money;
const emit = defineEmits(['update:modelValue', 'update:money']);
const consume = () => {
  console.log(parentData.moneyModifiers);
  // 可以通过判断此修饰符是否为true,来做一些相关的操作
  if(parentData?.moneyModifiers?.myModifier){
    emit('update:money', --childMoney)
  }else{
    emit('update:money', childMoney-=2)
  }
}
</script>

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 11:09:15  更:2022-05-05 11:13:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:02:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码