代码编织梦想

Props 父传值子组件

在这里插入图片描述
子组件

<template>
  <div class="son">
       <h1>我是子组件:曹植</h1>
       <p>{{props.info}}</p>
       <p>{{props.money}}</p>
       <p>{{info}}</p>
       <p>{{money}}</p>
       <button @click="updateProps">修改props数据</button>
  </div>
</template>

<script setup lang="ts">
let props = defineProps(['info','money']); //接收父类给予的数值
//按钮点击的回调
const updateProps = ()=>{
  //  props:只读 儿子没有
  console.log(props.info)
}
</script>

父组件

<template>
  <div class="box">
    <h1>props:我是父组件曹操</h1>
    <hr />
    <Child info="我是曹操" :money="money"></Child>  <!-- 通过info和:属性把值给入子组件  -->
    <ChildBro info="我是曹丕" :money="money-500"></ChildBro>
  </div>
</template>

<script setup lang="ts">
//props:可以实现父子组件通信,props数据还是只读的!!!
import Child from "./Child.vue";  //import引入子组件
import ChildBro from "./ChildBro.vue";
import { ref } from "vue";
let money = ref(10000);
</script>

CusTom event 子传父
在这里插入图片描述

<template>
  <div>
    <h1>事件</h1>
    <pre @click="handler">
      大江东去浪淘尽,千古分流人物
    </pre>
    <button @click="handler1(1,2,3,$event)">点击我传递多个参数</button>
    <hr>
    <Event1 @click="handler2"></Event1>
    <hr>
    <Event2 @xxx="handler3" @click="handler4"></Event2>
  </div>
</template>

<script setup lang="ts">
//引入子组件
import Event1 from './Event1.vue';
//引入子组件
import Event2 from './Event2.vue';
//事件回调--1
const handler = (event: any)=>{
    //event即为事件对象
    console.log(event);
}
//事件回调--2
const handler1 = (a: any,b: any,c: any,$event: any)=>{
   console.log("handler1"+a,b,c,$event)
}
//事件回调---3
const handler2 = ()=>{
    console.log("handler2"+123);
}
//事件回调---4
const handler3 = (param1: any,param2: any)=>{
    console.log("handler3"+param1,param2);
}
//事件回调--5
const handler4 = (param1: any,param2: any)=>{
     console.log("handler4"+param1,param2);
}
</script>

子1

<template>
  <div class="son">
      <p>我是子组件1</p>
      <button>点击我也执行</button>
  </div>
</template>

<script setup lang="ts">

</script>

子2

<template>
  <div class="child">
    <p>我是子组件2</p>
    <button @click="handler">xxx handler</button>
    <button @click="$emit('click','AK47','J20')">自定义事件click</button>
  </div>
</template>

<script setup lang="ts">
//利用defineEmits方法返回函数触发自定义事件
//defineEmits方法不需要引入直接使用
let $emit = defineEmits(['xxx','click']);
//按钮点击回调
const handler = () => {
  //第一个参数:事件类型 第二个|三个|N参数即为注入数据
    $emit('xxx','东风导弹','航母');
};
</script>

具体代码`

 <!-- 父类给予回调方法  -->
<pre @click="handler">handler点击事件</pre>
<button @click="handler1(1,2,3,$event)">点击我传递多个参数</button>
<Event1 @click="handler2"></Event1>
<Event2 @xxx="handler3" @click="handler4"></Event2>

<!-- Event1 开箱即用-->
<button>handeler2</button>

<!-- Event2-->
 <button @click="handler">handler3</button>
    <button @click="$emit('click','AK47','J20')">handler4</button>
    <script setup lang="ts">
//利用defineEmits方法返回函数触发自定义事件
//defineEmits方法不需要引入直接使用
let $emit = defineEmits(['xxx','click']); //拿下父类给予的自定义事件xxx
//按钮点击回调
const handler = () => {
    $emit('xxx','东风导弹','航母'); //该回调用的是父类给予的handler3
};
</script>

兄弟之间传值
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
曹植

<template>
  <div class="child1">
    <h3>我是子组件1:曹植</h3>
   <p></p>
  </div>
</template>
<script setup lang="ts">
import $bus from "../../bus";
import { onMounted } from "vue";
import { ref } from "vue";
onMounted(() => {
  //第一个参数:即为事件类型  第二个参数:即为事件回调
  $bus.on("car", (car) => {
    document.getElementsByTagName("p")[0].innerHTML="目前收到:"+car.car+"台法拉利";
    console.log(car);
  });
});
</script>

曹丕

<template>
  <div class="child2">
     <h2>我是子组件2:曹丕</h2>
     <button @click="handler">点击我给兄弟送一台法拉利</button>
  </div>
</template>
<script setup lang="ts">
import $bus from '../../bus';
let count=1;
const handler = ()=>{
  $bus.emit('car',{car:count});
  count++;
}
</script>

我自己改了一下 ,没什么难的,用的mitt插件,mitt带着数据到处跑,哪里引入mitt,哪里就能用,所谓总线

V-model

<template>
  <div>
    <h1>v-model:钱数{{ money }}{{pageNo}}{{pageSize}}</h1>
    <input type="text" v-model="money"  placeholder="money"/>
    <hr />
    <Child v-model="money"></Child>
    <hr />
    <Child1 v-model:pageNo="pageNo" v-model:pageSize="pageSize"></Child1>
  </div>
</template>

<script setup lang="ts">
import Child from "./Child.vue";
import Child1 from "./Child1.vue";
import { ref } from "vue";
//父组件的数据钱数
let money = ref(10000);
//自定义事件的回调
const handler = (num) => {
  //将来接受子组件传递过来的数据
  money.value = num;
};
//父亲的数据
let pageNo = ref(1);
let pageSize = ref(3);
</script>

子1

<template>
  <div class="child">
    <h3>钱数:{{ modelValue }}</h3>
    <button @click="handler">父子组件数据同步</button>
  </div>
</template>
<script setup lang="ts">
//接受props
let props = defineProps(["modelValue"]);
let $emit = defineEmits(['update:modelValue']);
//子组件内部按钮的点击回调
const handler = ()=>{
   //触发自定义事件
   $emit('update:modelValue',props.modelValue+1000);
}
</script>

子2

<template>
  <div class="child2">
    <h1>同时绑定多个v-model</h1>
    <button @click="handler">pageNo{{ pageNo }}</button>
    <button @click="$emit('update:pageSize', pageSize + 4)">
      pageSize{{ pageSize }}
    </button>
  </div>
</template>

<script setup lang="ts">
let props = defineProps(["pageNo", "pageSize"]);
let $emit = defineEmits(["update:pageNo", "update:pageSize"]);
//第一个按钮的事件回调
const handler = () => {
  $emit("update:pageNo", props.pageNo + 3);
};
</script>

在这里插入图片描述

父组件定义好值,通过v-model传入子组件子组件通过props接收,通过handler修改
后面的就不是很想写了,搞不明白了

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43634431/article/details/135738543

尚硅谷---vue3同步笔记-爱代码爱编程

一、初识Vue3 Vue3带来了什么? 1.性能上的提升:         更快、占用内存更少 2.源码的升级:         使用Proxy代替defineProperty实现响应式         重写虚拟DOM的实现和Tree-Shaking                 Tree-Shaking是一个通常用于描述移除JavaScr

尚硅谷vue项目实战,前端项目-尚品汇(大型\重磅),笔记-爱代码爱编程

项目资料 前端资料:https://gitee.com/jch1011/shangpinhui_0415 后台资料:https://gitee.com/jch1011/guigu B站直达:https://www.bi

硅谷甄选项目笔记-爱代码爱编程

探索性——学习Vue3 2023.8.4-2023.8. 一、再次学习ES6文档 1.2 ES6 环境搭建 | 菜鸟教程 (runoob.com) 二、再次学习Vue3文档 创建一个 Vue 应用 | Vue.js

重磅上新 | 尚硅谷vue3项目「硅谷甄选」发布-爱代码爱编程

硅谷甄选,是我们推出的Vue3后台管理项目。项目采用最新的Vue3版本+组合式API的流行写法,同时使用了对类型限制更为严格的TypeScript、前端下一代构建化工具Vite、路由的最新版本vue-router4、新一代状态仓库管理工具Pinia、UI组件库Element-plus、前后端交互工具Axios以及可视化大屏工具ECharts。 项目采用主

【vue3+ts项目】硅谷甄选 — 搭建后台管理系统模板-爱代码爱编程

一、 项目初始化 一个项目要有统一的规范,需要使用eslint+stylelint+prettier来对我们的代码质量做检测和修复,需要使用husky来做commit拦截,需要使用commitlint来统一提交规范(即统一提交信息),需要使用preinstall来统一包管理工具。 PS: vue3官方推荐的 IDE 设置是VSCode + V

尚硅谷——硅谷甄选运营平台-爱代码爱编程

一、vue3组件通信方式 通信仓库地址:vue3_communication: 当前仓库为贾成豪老师使用组件通信案例 不管是vue2还是vue3,组件通信方式很重要,不管是项目还是面试都是经常用到的知识点。 比如:vue2组件通信方式 props:可以实现父子组件、子父组件、甚至兄弟组件通信 自定义事件:可以实现子父组件通信 全局事件总线$bu

【vue3+ts项目】硅谷甄选 — 路由配置+登录模块+layout组件+路由鉴权_硅谷甄选(vue3+typescript)-爱代码爱编程

一、路由配置 项目一共需要4个一级路由:登录(login)、主页(home)、404、任意路由(重定向到404)。 1.1 安装路由插件 pnpm install vue-router 1.2 创建路由组件  在src目录下新建views文件夹,在views中创建login、home、404路由组件。 1.3 配置路由 在src目录下新建

前端vue架构-爱代码爱编程

1 理解: 创建视图的函数(render)和数据之间的关联; 当数据发生变化的时候,希望render重新执行; 监听数据的读取和修改; defineProperty:监听范围比较窄,只能通过属性描述符去监听已

vue.js的发展史(一)-爱代码爱编程

Vue.js的发展史(一) 什么是Vue? Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue 都可以胜任。  来源官方解释--

vue3选项式和组合式生命周期说明-爱代码爱编程

生命周期:composition 生命周期先后顺序为: setup -beforeCreate和created的统称,只在composition里面取消这两个,可以在这里进行数据请求 onBeforeMount-挂载前,可以请求后台数据 onMounted-挂载,可以获取DOM实例 onBeforeUpdate-更新前,可以在此更改数据 onU

how -爱代码爱编程

一、背景 在 HOW - Canvas 入门系列之表格绘制工具(二) 中我们介绍过基于原生 Canvas 实现表格绘制,并支持如下能力: 绘制表格数据并填充单元格内容单元格点击触发事件支持动态调整列宽 今天我们将将基于

web转flutter基础学习笔记(内含vue和flutter对比)-爱代码爱编程

一、Widget简要概括 如果说Vue的UI是template包裹的一个个组件 那么Flutter的UI就是baseBuild中return出来的嵌套罗列的widget StatelessWidget 用

尚硅谷vue项目实战硅谷甄选笔记——2024.01.02-爱代码爱编程

硅谷甄选运营平台 此次教学课程为硅谷甄选运营平台项目,包含运营平台项目模板从0到1开发,以及数据大屏幕、权限等业务。 此次教学课程涉及到技术栈包含***:vue3+TypeScript+vue-router+pinia+

vue3尚硅谷张天禹笔记_张天禹尚硅谷-爱代码爱编程

1. Vue3简介 2020年9月18日,Vue.js发布版3.0版本,代号:One Piece(n 经历了:4800+次提交、40+个RFC、600+次PR、300+贡献者 官方发版地址:Release v3.0.