vue3 的组件通信以及ref的使用&v-model

2023-10-27

一. 组件通信

1. props=>父向子传值

props主要用于父组件向子组件通信。在父组件中通过用 :msg=“msg” 绑定需要传给子组件的属性值,然后再在子组件中用 props 接收该属性值。

方法一 普通方式:

// 父组件 传值
<child :msg1="msg1" :list="list"></child>
<script>
import child from "./child.vue";
import { ref, reactive } from "vue";
export default {
    setup() {
        //基础类型传值
        const msg1 = ref("父组件传给子组件的msg1");
        // 复杂类型(数组或对象)传值
         const list = reactive(['苹果', '梨', '香蕉'])
        return {
            msg1,
            list
        }
    }
}
</script>
 
// 子组件 接收
<template>
  <ul >
    <li  v-for="i in list" :key="i">{{ i }}</li>
  </ul>
</template>
<script>
export default {
  // props接受父组件传过来的值
  props: ["msg1", "list"],
  setup(props) {
    console.log(props);
    // { msg1:"父组件传给子组件的msg1", list:['苹果', '梨', '香蕉'] }
  },
}
</script>

方法二:使用 setup 语法糖

// 父组件 传值
<child :msg="msg" :list="list">
</child>
<script setup>
    import child from "./child.vue";
     const list = reactive(['苹果', '梨', '香蕉'])
    const msg = ref("父组件传给子组件的值");
</script>
 
// 子组件 接收
<template>
  <ul >
    <li  v-for="i in list" :key="i">{{ i }}</li>
  </ul>
</template>
<script setup>
    // 这里不需要在从vue中引入defineProps,直接用
    const props = defineProps({
        // 第一种写法
        msg: String,
        // 第二种写法
        list: {
	    	type: Array,
	   	 	default: () => [],
	  	}
    })
    console.log(props);
</script>

2.emit方式=>子向父传值defineEmits

$emit 也就是通过自定义事件传值,主要用于子组件向父组件通信
在子组件的点击事件中,通过触发父组件中的自定义事件,把想传给父组件的信息以参数的形式带过去,父组件便可以拿到子组件传过来的参数值。

// 子组件 派发
<template>
  <button @click="handleClick">按钮</button>
</template>
<script setup>
  let infos = ref('还好');
  const emit = defineEmits(['myClick']);//emits 为 defineEmits 显示声明后的对象。
// defineEmits:如存在多个监听事件则为 defineEmits(['increase','myClick'])
  const handleClick = () => {
    // 触发父组件中的方法,并把值以参数的形式传过去
    emit('myClick', infos);
    emit('increase', ref('还好33'));
  };
</script>

 
// 父组件 接收
<template>
    <child @myClick="onMyClick"  @increase="onIncrease"></child>
</template>
<script setup>
    import child from "./child.vue";
    // 父组件接受到子组件传过来的值
    const onMyClick = (msg) => {
        console.log(msg);
    }
    const onIncrease = (msg) => {
    console.log(msg.value);
}
</script>

3.expose / ref=》父获取子得属性或方法

expose与ref 主要用于父组件获取子组件的属性或方法。在子组件中,向外暴露出属性或方法,父组件便可以使用 ref 获取到子组件身上暴露的属性或方法。

<template>
  <div>父组件:拿到子组件的message数据:{{ msg }}</div>
  <button @click="callChildFn">调用子组件的方法</button>

  <hr />

  <Child ref="com" />
</template>

<script setup>
  import Child from './child.vue';

  const com = ref(null); // 通过 模板ref 绑定子组件

  const msg = ref('');

  onMounted(() => {
    // 在加载完成后,将子组件的 message 赋值给 msg
    msg.value = com.value.message;
  });

  function callChildFn() {
    console.log(com.value, '====');
    // 调用子组件的 changeMessage 方法
    com.value.show();

    //  重新将 子组件的message 赋值给 msg
    msg.value = com.value.message;
  }
</script>

子组件:
<template>
  <div> 子组件:</div>
</template>
<script setup>
  const message = ref('子组件传递得信息');
  const show = () => {
    console.log('子组件得方法');
  };
  defineExpose({
    message,
    show,
  });
</script>

4.attrs

attrs 主要用于子组件获取父组件中没有通过 props 接收的属性

<template>
  <Child :msg1="msg1" :msg2="msg2" title="子组件" />
</template>

<script setup>
  import Child from './child.vue';
  const msg1 = ref('信息1');
  const msg2 = ref('信息2');
</script>

子组件
<template>
  <div> 子组件:{{ msg1 }}-{{ attrs.msg2 }}-{{ attrs.title }}</div>
</template>
<script setup>
  // 子组件接收msg1
  defineProps({
    msg1: String,
  });

  const attrs = useAttrs();
  // 因为子组件接收了msg1,所以打印的结果中不会包含msg1, { msg2:"信息1", title: "子组件" }
  // 如果子组件没有接收msg1,打印的结果就是 { msg1: "信息1", msg2:"信息12", title: "子组件" }
  console.log(attrs);
</script>


5. provide / inject

遇到多层传值时,使用 props 和 emit 的方式会显得比较笨拙。这时就可以用 provide 和 inject 了。
provide与inject 主要为父组件向子组件或多级嵌套的子组件通信
provide:在父组件中可以通过 provide 提供需要向后代组件传送的信息。
inject:从父组件到该组件无论嵌套多少层都可以直接用 inject 拿到父组件传送的信息。

<template>
  <div>------祖父组件---------</div>
  <button @click="fn">改变location的值</button>
  <br />
  <div>双向数据绑定:</div>
  姓名 {{ userInfos.username }}<input v-model="userInfos.username" />
  <Child />
</template>

<script setup>
  import Child from './child.vue';
  let location = ref('传递祖父的参数');
  var userInfos = reactive({
    username: '张三',
    age: 20,
  });
  let fn = () => {
    location.value = '改变值';
  };
  provide('location', location);
  provide('userInfos', readonly(userInfos));
</script>

子组件:
<template>
	<div>
		  <Sun />
	</div>
</template>

<script>
import Sun from "./sun.vue";
</script>
孙组件:
<template>
  <div>
    <h5>-------------孙组件接受参数-------------</h5>
    <div>1.祖父组件定义provide,孙组件inject接受:{{ location }}</div>
    <p>用户信息: {{ userInfos.username }}</p>
    <br />
    <br />
    <div>2.provide inject实现父子组件传值的时候,子组件改变数据也会影响父组件</div>
    <br />姓名:
    <input v-model="userInfos.username" />
  </div>
</template>
<script setup>
  let location = inject('location');
  let userInfos = inject('userInfos');
</script>


注意:增加readonly后,子组件修改后,不会影响到父组件

类型安全的provide/inject
使用vue 提供的injectionKey 类型工具来再不同的上下文中共享类型

context。ts

import { InjectionKey, Ref } from 'vue'
 
export interface SetUser{
 name: string
  age: number
}
 
// 函数的的InjectionKey
export const setUserKey: InjectionKey<SetUser> = Symbol()


父组件
<script setup>
import {setUserKey } from './context'
provide(setUserKey , { 
name: 'Karen', //如果输入1,那么类型就会报错
age: 20
 })
</script>

子组件
<script setup>
import {setUserKey } from './context'
const user =inject(setUserKey)// 输出SetUser | undefined
if(user){
console.log(user.name)//Karen
}
</script>

6.readonly

获取一个对象 (响应式或纯对象) 或 ref 并返回原始代理的只读代理,不能给属性重新赋值。只读代理是递归的:访问的任何嵌套 property 也是只读的。
简单得理解:要确保父组件传递得数据不会被子孙组件更改时,增加readonly

7.v-model

v-model 是 Vue 的一个语法糖。在 Vue3 中的玩法就更多了

单个 v-model 绑定

<template>
  <Child v-model="message" />
</template>

<script setup>
  import Child from './child.vue';
  const message = ref('父传给子');
</script>
子组件:
<template>
  <div>
    <button @click="handleClick">修改model</button>
    {{ modelValue }}
  </div>
</template>
<script setup>
  // 接收
  defineProps([
    'modelValue', // 接收父组件使用 v-model 传进来的值,必须用 modelValue 这个名字来接收
  ]);

  const emit = defineEmits(['update:modelValue']); // 必须用 update:modelValue 这个名字来通知父组件修改值

  function handleClick() {
    // 参数1:通知父组件修改值的方法名
    // 参数2:要修改的值
    emit('update:modelValue', '子改变值');
  }
</script>


多个 v-model 绑定

<template>
  <Child v-model:msg1="message1" v-model:msg2="message2" />
</template>

<script setup>
  import Child from './child.vue';
  const message1 = ref('水果1');
  const message2 = ref('水果2');
</script>
子组件:
<template>
  <div>
    <div><button @click="changeMsg1">修改msg1</button> {{ msg1 }}</div>
    <div><button @click="changeMsg2">修改msg2</button> {{ msg2 }}</div>
  </div>
</template>
<script setup>
  // 接收
  defineProps({
    msg1: String,
    msg2: String,
  });

  const emit = defineEmits(['update:msg1', 'update:msg2']);

  function changeMsg1() {
    emit('update:msg1', '蔬菜1');
  }

  function changeMsg2() {
    emit('update:msg2', '蔬菜2');
  }
</script>

v-model 修饰符

v-model 还能通过 . 的方式传入修饰。v-model 有内置修饰符——.trim、.number 和 .lazy。但是,在某些情况下,你可能还需要添加自己的自定义修饰符。

<template>
  <Child v-model.uppercasefn="message" />
</template>

<script setup>
  import Child from './child.vue';
  const message = ref('水果');
</script>
子组件:
<template>
  <div>
    <div>{{ modelValue }}</div>
  </div>
</template>
<script setup>
  const props = defineProps(['modelValue', 'modelModifiers']);

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

  onMounted(() => {
    console.log(props.modelModifiers, '自定义v-model 修饰符');
    // 判断有没有uppercasefn修饰符,有的话就执行 下面得方法 方法
    if (props.modelModifiers.uppercasefn) {
      emit('update:modelValue', '蔬菜');
    }
  });
</script>


8.插槽 slot

插槽可以理解为传一段 HTML 片段给子组件。子组件将 元素作为承载分发内容的出口。

默认插槽

插槽的基础用法非常简单,只需在 子组件 中使用 标签,就会将父组件传进来的 HTML 内容渲染出来。

<template>
  <Child>
    <div>渲染</div>
  </Child>
</template>
子组件:
// Child.vue

<template>
  <div>
    <slot></slot>
  </div>
</template>

具名插槽

具名插槽 就是在 默认插槽 的基础上进行分类,可以理解为对号入座。

<template>
  <Child>
    <template v-slot:monkey>
      <div>渲染</div>
    </template>

    <button>按钮</button>
  </Child>
</template>
子组件:
<template>
  <div>
    <!-- 默认插槽 -->
    <slot></slot>
    <!-- 具名插槽 -->
    <slot name="monkey"></slot>
  </div>
</template>

父组件需要使用 标签,并在标签上使用 v-solt: + 名称 。子组件需要在 标签里用 name= 名称 对应接收。

作用域插槽

<template>
  <!-- v-slot="{scope}" 获取子组件传上来的数据 -->
  <!-- :list="list" 把list传给子组件 -->
  <Child v-slot="{ scope }" :list="list">
    <div>
      <div>{{ scope.name }}--职业:{{ scope.occupation }}</div>
      <hr />
    </div>
  </Child>
</template>
<script setup>
  import Child from './child.vue';
  const list = reactive([
    { name: '鲁班', occupation: '辅助' },
    { name: '貂蝉', occupation: '刺客和法师' },
    { name: '虞姬', occupation: '射手' },
  ]);
</script>
子组件:
<template>
  <div>
    <!-- 用 :scope="item" 返回每一项 -->
    <slot v-for="item in list" :scope="item"></slot>
  </div>
</template>
<script setup>
  defineProps({
    list: {
      type: Array,
      default: () => [],
    },
  });
</script>

9.事件总线(mitt&tiny-emitter)

Vue3中移除了事件总线,但是可以借助于第三方工具来完成,Vue官方推荐mitttiny-emitter
在大多数情况下不推荐使用全局事件总线的方式来实现组件通信,虽然比较简单粗暴,但是长久来说维护事件总线是一个大难题。

mitt

mitt.js 不是专门给 Vue 服务的,但 Vue 可以利用 mitt.js 做跨组件通信。(vue3去掉了 o n 、 on、 onoff后,使用mitt第三方库替代eventBus的原理。)

比起 Vue 实例上的 EventBus,mitt.js 好在哪里呢?

  1. 首先它足够小,仅有200bytes。
  2. 其次支持全部事件的监听和批量移除。
  3. 它还不依赖 Vue 实例,可以跨框架使用,React 或者Vue,甚至 jQuery 项目都能使用同一套库。

npm install --save mitt

父组件:
<template>
	<div>
		<Home />
        <Mitt/>
    <div>
</template>
<script >
import Home from "@/views/home.vue";
import Mitt from "@/views/mitt.vue";
</script >
emiter.js
// mitt库默认导出的是一个函数,我们需要执行它从而得到事件总线的对象
import mitt from 'mitt'
const emiter = mitt()
export default emiter

子组件Home:
<template>
	<div>
         <p>这里是home组件</p>
	<button @click="sendHomeContent">$mitt发送数据</button>  
	</div>
</template>

<script>
import { ref}from 'vue'
import emitter from "./../model/emitter.js";
export default {
    setup(props,ctx) {
        const money = ref(98);
        var sendHomeContent=()=>{
            // emit发送信息
            emitter.emit("moneyEvent",money.value += 2);// 触发自定义总线moneyEvent,并传入一个对象 。
        }
        return{
            sendHomeContent
        }
    }
};
</script>
子组件 Mitt:
<template>
	<div>
		<p>这里是Mitt组件</p>
        <p>接收到的数据:{{ amount }}</p>
	</div>
</template>

import { ref,   onUnmounted, onMounted } from 'vue';
import emitter from "../model/event";
export default {
	setup(props,ctx) {
        const amount = ref(0);
        const callback = (res) => {
            if (res) {
                amount.value = res;
            }
        }
        onMounted(() => {
           //DOM挂载完毕
            emitter.on('moneyEvent', callback );
        })
        onUnmounted(() => {
            //销毁完毕
            emitter.off('moneyEvent',callback );
        });
        return {
            amount
        }
    }
};

在这里插入图片描述
总结:
emit 发送信息
on 接收信息
off 取消监听
清除所有的事件写法
emitter.all.clear()

10.状态管理工具

Vuex和Pinia是Vue3中的状态管理工具,使用这两个工具可以轻松实现组件通信。
Pinia 是最近比较火热的一个工具,也是用来处理 跨组件通信 的,极大可能成为 Vuex 5

二. 细节

1.Vue3中的ref如何使用?v-for有如何使用ref?

Vue2 中的 ref

获取节点:这是 ref 的基本功能之一,目的就是获取元素节点,在 Vue 中使用方式也很简单

<template>
  <div id="app">
    <div ref="test">你好!</div>
  </div>
</template>
<script>
export default {
  mounted() {
    console.log(this.$refs.test); // <div>你好!</div>
  },
};
</script>

Vue3 中 ref 访问元素

Vue3 中通过 ref 访问元素节点与 Vue2 不太一样,在 Vue3 中我们是没有 this 的,也没有 this.$refs。想要获取 ref,我们只能通过声明变量的方式。

<template>
  <div ref="test">你好!</div>
</template>
<script setup >
import { onMounted, ref } from "vue";
const test = ref(null);
onMounted(() => {
  console.log(test.value); // <div>你好!</div>
});
</script>

注意点:
• 变量名称必须要与 ref 命名的属性名称一致。
• 通过 test.value 的形式获取 DOM 元素。
• 必须要在 DOM 渲染完成后才可以获取 test.value,否则就是 null。

v-for 中使用 ref

使用 ref 的场景有多种,一种是单独绑定在某一个元素节点上,另一种便是绑定在 v-for 循环出来的元素上了。这是一种非常常见的需求,在 Vue2 中我们通常使用:ref="…"的形式,只要能够标识出每个 ref 不一样即可。
但是在 Vue3 中又不太一样,不过还是可以通过变量的形式接收。

<template>
	<div>
         <p ref="test">1. v-for 中的 Ref 数组</p>
            <div v-for="item in 5" :key="item"  :ref="setItemRef">
                  {{ item }} -水果
            </div>
          <button @click="printFN">点击2</button>
	</div>
</template>

<script>
import { ref,onMounted}from 'vue'
export default {
    setup(props,ctx) {
        const test = ref(null);
        let itemRefs = [];
        const setItemRef = el => {
        if (el) {
            itemRefs.push(el)
        }
        }
        onMounted(() => {
            console.log(test.value,'在 vue3 中'); // <div>小猪课堂</div>
        });
        const printFN=()=>{
            console.log(itemRefs,'在嵌套 vue3 中')
        }
        return {
            test,
            setItemRef,
            printFN
        }
    }
};
</script>

在这里插入图片描述
这里我们需要注意一下:我们似乎没办法区分哪个 li 标签哪个 ref,初次之外,我们的 itemRefs 数组不能够保证与原数组顺序相同,即与 list 原数组中的元素一一对应。

ref 绑定函数

前面我们在组件上定义 ref 时,都是以一个字符串的形式作为 ref 的名字,其实我们的 ref 属性还可以接收一个函数作为属性值,这个时候我们需要在 ref 前面加上:。

<template>
	   <div :ref="setHelloRef">水果</div>
</template>

<script>
import { ref}from 'vue'
export default {
    setup(props,ctx) {
        const setHelloRef = (el) => {
          console.log(el); // <div>水果</div>
        };
        return {
            setHelloRef
        }
    }
};
</script>

上段代码中 ref 属性接收的是一个 setHelloRef 函数,该函数会默认接收一个 el 参数,这个参数就是我们需要获取的 div 元素。假如需求中我们采用这种方式的话,那么完全可以把 el 保存到一个变量中去,供后面使用。

v-for 中使用ref 函数

<template>
    <div v-for="item in 10" :key="item" :ref="(el) => setItemRefs(el, item)">
            {{ item }} -水果
    </div>
</template>

<script>
import { ref,onMounted}from 'vue'
export default {
    setup(props,ctx) { 
        let itemRefs = [];
        const setItemRefs = (el,item) => {
            if(el) {
                itemRefs.push({
                    id: item,
                    el,
                });
            }
        }
        onMounted(() => {
            console.log(itemRefs,'在 vue3 中'); // <div>小猪课堂</div>
        });
        return {
            setItemRefs
        }
    }
};
</script>

在 v-for 中使用函数的形式传入 ref 与不使用 v-for 时的形式差不多,不过这里我们做了一点变通,为了区别出哪个 ref 是哪一个 li 标签,我们决定将 item 传入函数,也就是(el) => setItemRefs(el, item)的写法。
这种形式的好处既让我们的操作性变得更大,还解决了 v-for 循环是 ref 数组与原数组顺序不对应的问题。
在这里插入图片描述

组件上使用 ref

之前所使用 ref 时,都是在一个具体的 dom 元素上绑定,但是我们也可以将 ref 绑定在组件上,比如在 Vue2 中,我们将 ref 绑定在组件上时,便可以获取到该组件里面的所有数据和方法.在 Vue3 中,使用 ref 获取子组件时,如果想要获取子组件的数据或者方法,子组件可以通过defineExpose 方法暴露数据
参考上面“expose / ref=》父获取子得属性或方法”

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue3 的组件通信以及ref的使用&v-model 的相关文章

  • matlab编写dbscan聚类

    在Matlab中编写DBSCAN聚类的方法有很多种 一种常用的方法是手动编写代码 下面是一个简单的DBSCAN示例 function labels nClusters dbscan data eps MinPts data 数据点 eps

随机推荐

  • Qt 使用QInputDialog弹出输入框获取用户输入数据

    简要说明 在开发Qt程序的过程中 我们可能会需要在程序中弹出输入框 并且获取用户输入的数据 一种比较麻烦的做法就是新建一个对话框类 然后在主界面中调用对话框类 获取返回值 使用QInputDialog对话框类可以通过访问不同的接口函数 弹出
  • php导出数据xlsx

    lists 二维数组 public function xlsx lists 生成文件名 date date Y m d H i s time fileName XXXX date xlsx 头部标题 xlsx header array 序号
  • Java Springboot--swagger配置

    文章转载自 第一步 配置pom xml文件
  • 视线估计(Gaze Estimation)简介概述

    PaperWeekly 原创 作者 俞雨 单位 瑞士洛桑联邦理工学院博士 研究方向 视线估计 头部姿态估计 本文七个篇章总计涵盖 29 篇论文 总结了自深度学习以来 视线估计领域近五年的发展 概述 1 1 问题定义 广义的 Gaze Est
  • [Unity]Lua本地时间、倒计时和正计时。

    惯例 直接上代码 正计时开始时的时间戳 self begin time os time 倒计时时长 01 30 00 self countdown time 5400 是否开始计时 self is update local time tru
  • 一文搞定在Ubuntu安装tldr

    目录 第一步 执行安装命令 第二步 更新tldr数据库 第三步 测试tldr功能 补充 未成功返回的错误类型 在安装之前你得先在Ubuntu上登入你自己的账户 当然你肯定在刚安装好Ubuntu的时候就注册自己的账户并且登录了 第一步 执行安
  • 大页内存(HugePages)在通用程序优化中的应用

    今天给大家介绍一种比较新奇的程序性能优化方法 大页内存 HugePages 简单来说就是通过增大操作系统页的大小来减小页表 从而避免快表缺失 这方面的资料比较贫乏 而且网上绝大多数资料都是介绍它在Oracle数据库中的应用 这会让人产生一种
  • 2021-01-17

    静态路由实验 实验目的 1 全网所有网段全部基于192 168 1 0 24划分所得 2 R1 R4每台设备均有两个环回 3 全网可达 4 尽量减少路由条目 且防止环路 5 R5的环回5 5 5 5 24不能出现在其他的设备路由表中 6 按
  • 2021-04-12

    NLP 自然语言处理 和CV相比 nlp最大的特点是特征是离散的 不像cv中是一幅图 nlp是一个个的句子 简单说几点nlp的难点 1 相同意思的句子表达有多种 我爱踢足球 足球是我的爱好 我的爱好之一是足球 2 相同词在不同语境中意思不同
  • vue项目 v-for无法渲染问题

    使用map 函数 可能是解决了对象指向问题 目前还不知道原因 postlist fav2是在data 中定义的数组 在created 里对postlist fav2进行了数组对象的初始化操作 然后就无法渲染 使用map方法才能渲染到页面上
  • 写入单元格_Excel VBA单元格的基本操作(一)

    在Excel VBA中 对单元格的操作可以有多种形式来定义表示 1 打开Visual Basic 添加模块和过程 称之为 单元格操作 Sub 单元格操作 End Sub 2 单元格第一种表达方式 直接定位到某个单元格 B3 Sub 单元格操
  • ES6的Class的prototype、__proto__

    ES6继承与ES5的区别 ES6通过class实现继承 class的继承通过关键字extends实现 class Parent constructor name this name name getName console log this
  • Linux下基于Zynq用EthLite+GmiitoRgmii实现100M网络通信

    目录 前言 一 IP核配置 1 ETHLITE配置 2 GMIITORGMII配置 二 IP 连接关系 三 设备树描述 前言 本文将介绍如何在Linux下使用EthLite加GmiitoRgmii实现百兆网络通信 此方法只需要一个中断 若工
  • 百度AIStudio平台 持久化安装包

    目录 查看环境 创建目录 安装在该目录下 重启后仍可用 查看环境 平台使用的是conda创建的虚拟环境进行安装的包 不过我们可以使用pip安装工具快速安装 而且使用conda默认安装的包将在下次启动服务时还原 注 该教程不适用于tensor
  • Create a PCL visualizer in Qt with QtDesigner

    这是PCL文档中的例程实现 原文地址 http pointclouds org documentation tutorials qt visualizer php more on qt and pcl 介绍一下环境 Ubuntu16 04
  • std::numeric_limits 出错

    not enough actual parameters for macro max for std numeric limits
  • cuBLAS矩阵乘法性能分析(附代码示例)

    使用教程 矩阵乘法是神经网络中最基础 最重要的一个运算 在用CUDA实现矩阵乘法时 不需要我们手动写 cuBLAS库提供了现成的矩阵乘法算子 例如cublasGemmEx和cublasLtMatmul 其中后者是轻量级版本 API调用更灵活
  • DL入门(1):卷积神经网络(CNN)

    写在前面 看预测论文综述时 面临这样一个问题 很多DL的方法只是会简单运用 却不是特别了解其详细原理 故针对CNN RNN LSTM AutoEncoder RBM DBN以及DBM分别做一些简单总结 以达到了解的目的 此篇为CNN 目录
  • torch.stack()按轴叠加原理

    1 问题 大部分帖子和一些典型的介绍numpy pytorch的书籍对此部分并没有详细的介绍 仅仅简单地在np cat 或torch stack 等中提到当连接轴指定为0 或1时按照某某连接 排列 然而 当连接轴值较大时 如3 4 5 笔者
  • vue3 的组件通信以及ref的使用&v-model

    一 组件通信 1 props gt 父向子传值 props主要用于父组件向子组件通信 在父组件中通过用 msg msg 绑定需要传给子组件的属性值 然后再在子组件中用 props 接收该属性值 方法一 普通方式 父组件 传值