前端小白学习vue3框架(二)

一.组件以及组件传值

1.父传值给子组件

做法:子组件引入defineProps,通过fefineProps(自定义传入的值),const 定义变量props接收fefineProps(自定义传入的值)-->得到的是一个对象,在子组件中可以通过props.自定义传入的值得到父组件传递的数据

父组件import引入该子组件,在template里定义的子组件动态绑定  :自定义传入的值=父组件想要传递的数据

//在子组件中
<template>
  <div>
    我的资料(子组件)
  </div>
  <ul>
    <li v-for="item in props.arr" :key="item.id">
    {{ item.name }}
    </li>
  </ul>
  <button>发送数据给父组件</button>
</template>

<script lang="ts" setup>
import { defineProps } from 'vue';
const props=defineProps(['arr'])
console.log(props.arr);


</script>


<style >
ul{
  list-style: none;
}
</style>



在父组件中


<template>
  <div>
    <div>
    <h3>个人中心(父组件传值)</h3>
  </div>
  <my-info :arr="lists"></my-info>
  </div>
 
</template>

<script lang="ts" setup>
// ref,reactive用来定义响应式数据
import {ref,reactive} from 'vue'
import MyInfo from '@/components/MyInfo.vue';
let lists=ref([
  {id:1,name:'玫瑰花'},
  {id:2,name:'哈哈花'},
  {id:3,name:'牛牛花'},
])

</script>

2.子组件传值给父组件

做法:在子组件里import 引入defineEmits自定义事件const $emit=defineEmits(['自定义事件']),写方法传递    const add=()=>{ $emit('emit-data',{message:"子组件传递的值"})},在子组件标签绑定该方法传递@click=“add”;在父组件定义响应式数据赋传过来的值写方法接收传递的值,let msg=ref("");const rec=(message:string)=>{msg.value=message};
在template子组件中使用该方法@自定义事件=“rec”

//子组件
<template>
 <button @click="add">发送数据给父组件</button>
</template>
<script lang="ts" setup>
import { defineEmits } from 'vue';

// 子传父
// 自定义事件
const $emit=defineEmits(['send-data'])
const add=()=>{
  $emit('send-data',{message:'我是子组件传过来的'})
}

</script>


//父组件
<template>
 <p style="color: red;">{{ mesg }}</p>
  <my-info :arr="lists" @send-data="rec"></my-info>
</template>

<script lang="ts" setup>

import {ref} from 'vue'

import MyInfo from '@/components/MyInfo.vue';



interface Opt{
  message:string
}
// 在父组件创建响应式数据通过方法接收子组件传递的数据
let mesg=ref("")
//接收子组件传递的数据
const rec=(option:Opt)=>{
  //使用ref 定义的响应数据,得采用xxx.value去赋值和取值
    mesg.value=option.message


}




</script>

二.动画过渡以及内置组件使用

1.注入机制

通过provide inject方法    注入机制  provide  (生产者 提供数据)  inject (消费者,使用数据)

//可以在承载所有文件的vue.js中
//引入provide
import { provide } from "vue";
//提供数据
provide("point", { x: 100, y: 200 });

//使用数据可以在不同的组件中使用
例如在views下的aboutView.vue文件

import { inject } from "vue";
// 消费者,注入,使用祖先或者父级的数据
let res=inject('point')
console.log(res);

2.动画过渡

 <transition name="layout">
    <router-view/>
  </transition>

  <!-- vue3写法减少黄色警告 -->
  <!-- exclude="AboutView"  排除该组件缓存 -->
  <!-- include="AboutView"  包含该组件缓存 -->
    <router-view v-slot="{ Component }">
      <transition name="layout">
        <keep-alive include="AboutView">
          <component :is="Component"></component>
        </keep-alive>
      </transition>
    </router-view>


// 入场
.layout-enter-from {
  transform: translateX(-100%);
  opacity: 0;
}
.layout-enter-active {
  transition: all 0.5s;
}
.layout-enter-to {
  transform: translateX(0);
  opacity: 1;
}

3.内置组件

保存组件状态,要用keep-alive 包裹component内置组件

 
  <!-- exclude="AboutView"  缓存状态排除该组件缓存 -->
  <!-- include="AboutView"  缓存状态包含该组件缓存 -->
<keep-alive include="AboutView">
          <component :is="Component"></component>
        </keep-alive>

三.路由跳转和路由传值和导航守卫

1.路由传值

 //在vue.js中
<router-link :to="{path:'/search',query:{keyword:'哈哈'}}">Search</router-link>

//在其他的组件中

<template>

    <h3>{{kw}}</h3>
</template>



//userRoute获取路由信息 
//与vue2写法不同,没有this
import { useRoute } from "vue-router";


//调用函数获取路由信息
let $route = useRoute();
console.log($route);
let kw: any = ref("");
kw.value = $route.query.keyword;

2.路由跳转

   <button @click="jumpToHome">跳转首页</button>



import { useRouter } from "vue-router";
// 用函数获取路由实例对象,导航式跳转
const $router=useRouter()
const jumpToHome=()=>{
  $router.push({path:'/'})
}

3.路由守卫

  {
    path: '/draw',
    name: 'draw',
    meta:{
      done:false
    },
    component: () => import('../views/DrawView.vue')
  },

//导航守卫,禁止跳转到draw
router.beforeEach((to:any,from)=>{
 console.log("");
//  只拦截了draw
 if(to.meta.done==false){
  return false;  //取消导航,不允许访问
 }

})

四.使用element-plus组件库(vue@3使用)

进入项目文件安装------->npm  install  element-plus --save

在mian.ts文件中---->import 'element-plus/dist/index.css'

在mian.ts全局引入
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'


// 创建vue程序使用路由挂载程序
const app=createApp(App)
app.use(router)
app.use(ElementPlus)
app.mount('#app')




 <el-button type="primary" :icon="Edit" >点击查询</el-button>



<script>

import { ElButton } from 'element-plus'
import {  Edit} from '@element-plus/icons-vue'


</script>

五.基于vite构建项目步骤

通过vite创建vue3项目
---》npm create vue@latest
1.项目名称书写
2.选择ts
3.不选择JSX
4.引入vue-router
5.移入pinia
6.不选择Viteset
7.不需要端到端
8.选择Eslint
9.引入prettier

通过 pinia进行状态管理

在组件中引入       import { defineStore } from 'pinia'

///store 文件夹中的goods.ts
import { ref, computed } from 'vue'
import { defineStore } from 'pinia'

export const useGoodsStore = defineStore('goods', () => {
  const num = ref(0)
  const doubleCount = computed(() => num.value * 2)
  function add() {
    num.value++
  }

  function sub() {
    num.value--
  }
  //  把方法和响应式数据导出去
  return { num, doubleCount,add, sub }
}) 

//在pinia这个插件中,把vuex中的mutation去掉了



//在另外组件中


<script setup lang="ts">
//把goods.ts导入进来
import {useGoodsStore} from '../stores/goods'
const goodsStore=useGoodsStore()
console.log(goodsStore);

</script>

<template>
  <main>
   <h1> 主页</h1>
   <p>数字{{ goodsStore.num }}</p>
   <button @click="goodsStore.add">自增1</button>
   <button @click="goodsStore.sub">自减1</button>
  </main>
</template>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/579955.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vscode配置C/C++编程环境@配置C和CPP的运行和调试环境@配置过程的相关问题@中文文件名乱码@build和debug方案组合配置

文章目录 abstractgcc/g文档和用法常见用例设置源文件编码和调试信息选型示例 目录.vscode中的相关文件说明tasks.jsonlaunch.jsonc_cpp_properties.json IDE或编辑器配置vscode配置相关指令和快捷键默认task配置和取消默认 配置文件使用vscode预置变量和环境变量环境变量的使用…

【树莓派】树莓派4B配置环境

当你在配置你的系统时&#xff0c;这些指令将会非常有用。首先&#xff0c;你可能需要设置代理&#xff0c;特别是当你在一个受限的网络环境下工作时。以下是一些指令的详细说明&#xff1a; 设置代理 export http_proxyhttp://192.168.3.2:10811 export https_proxyhttp://1…

冰箱主控 32位MCU,多通道、高精度的AD采样配合温度传感器,实现冰箱各温室的精确控温;低功耗设计

概览 小华高性价比32位MCU&#xff0c;多通道、高精度的AD采样配合温度传感器&#xff0c;实现冰箱各温室的精确控温&#xff1b;低功耗设计&#xff0c;绿色低碳、节能环保&#xff1b;模块化设计&#xff0c;充分利用丰富的通讯接口&#xff0c;使主控板、显示板和驱动板灵活…

贝叶斯(Bayes)法则

1.生活中的贝叶斯 学概论统计或者机器学习经常都会提到贝叶斯法则&#xff0c;它到底是个啥&#xff0c;让我们一起看看。在生活中我们都会对人或者事物有一个非常主观的判断&#xff0c;这个主观的判断的基础是我们的生活经历总结出来的经验。先来两个例子&#xff1a; One&a…

加速博客体验:静态资源优化技巧大揭秘!

如今有许多人涉足博客写作&#xff0c;其中大多数正处于博客创作的旅程中。每位程序员都梦想拥有自己的服务器&#xff0c;理想情况下&#xff0c;服务器配置越高越好&#xff0c;价格越实惠越好。购买一台基础款服务器用于建立博客是一个不错的选择&#xff0c;因为并不需要处…

Date类.Java

目录 1.1Date概述 1.2Date常用方法 1.2.1 日期比较 2.1SimpleDateFormat类 1. 基本概念 2.构造方法 2.1格式规则&#xff1a; 3.成员方法 3.1格式化日期和时间 3.2解析日期和时间 4.练习1(出生日期&#xff09; 5.练习2(秒杀活动) 1.1Date概述 util里面的Data类…

K8s 使用 CephFS 作为后端存储(静态供给、动态供给)

一、K8s 使用 CephFS CephFS是 Ceph 中基于RADOS&#xff08;可扩展分布式对象存储&#xff09;构建&#xff0c;通过将文件数据划分为对象并分布到集群中的多个存储节点上来实现高可用性和可扩展性。 首先所有 k8s 节点都需要安装 ceph-common 工具&#xff1a; yum -y ins…

项目进度规划全攻略,助你成为项目管理高手

项目进度管理作为项目管理中的核心环节&#xff0c;对于确保项目按时交付、控制成本和提高质量至关重要。本文将详细介绍项目进度管理的基本步骤&#xff0c;帮助项目经理和团队成员更好地理解和执行进度管理工作。 项目进度管理的基本步骤主要包括以下几个方面&#xff1a; …

236基于matlab的三维比例导引法仿真

基于matlab的三维比例导引法仿真&#xff0c;可以攻击静止/机动目标。1.三维空间内的比例导引程序&#xff0c;采用龙哥库塔积分法&#xff1b;2.文件名为bili3dnew的.m文件是主函数&#xff0c;执行时需调用目标机动子函数、导引律子函数、数值积分法子函数&#xff1b;3.文件…

微服务之并行与分布式计算

一、概述 1.1集中式系统vs分布式系统 集中式系统 集中式系统完全依赖于一台大型的中心计算机的处理能力&#xff0c;这台中心计算机称为主机&#xff08;Host 或 mainframe &#xff09;&#xff0c;与中心计算机相连的终端设备具有各不相同非常低的计算能力。实际上大多数终…

《ESP8266通信指南》8-连接WIFI(Arduino开发)(非常简单)

往期 《ESP8266通信指南》7-Arduino 开发8266的环境配置与示例代码烧录-CSDN博客 《ESP8266通信指南》6-创建TCP服务器&#xff08;AT指令&#xff09;-CSDN博客 《ESP8266通信指南》5-TCP通信透传模式(AT指令)-CSDN博客 《ESP8266通信指南》4-以Client进行TCP通信&#xf…

弹性盒之主轴侧轴对齐方式

弹性盒设置主侧轴对齐方式 1.默认 justify-content: flex-start 2.justify-content: flex-end 3.justify-content: center 4.justify-content: space-between; 两端对齐 5.justify-content: space-around; 距离环绕 调整侧轴上中下 1.默认align-items: flex-start; …

论机器学习(ML)在网络安全中的重要性

机器学习是什么&#xff1f; 机器学习(ML)是人工智能的一个分支&#xff0c;它使用算法来使计算机系统能够自动地从数据和经验中进行学习&#xff0c;并改进其性能&#xff0c;而无需进行明确的编程。机器学习涉及对大量数据的分析&#xff0c;通过识别数据中的模式来做出预测…

在MySQL中isnull()函数不能作为替代null值!

在MySQL中isnull()函数不能作为替代null值&#xff01; 如下&#xff1a; 首先有个名字为business的表&#xff1a; SELECT ISNULL(business_name,no business_name) AS bus_isnull FROM business WHERE id2 直接运行就会报错&#xff1a; 错误代码&#xff1a; 1582 Incor…

5本On Hold,6本预警被踢,学术诚信高风险期刊被踢9本,还剩1本你还敢投吗?

本周投稿推荐 SSCI • 2/4区经管类&#xff0c;2.5-3.0&#xff08;录用率99%&#xff09; SCIE&#xff08;CCF推荐&#xff09; • 计算机类&#xff0c;2.0-3.0&#xff08;最快18天录用&#xff09; SCIE&#xff08;CCF-C类&#xff09; • IEEE旗下&#xff0c;1/2…

禅道项目管理系统身份认证绕过漏洞

禅道项目管理系统身份认证绕过漏洞 1.漏洞描述 禅道项目管理软件是国产的开源项目管理软件&#xff0c;专注研发项目管理&#xff0c;内置需求管理、任务管理、bug管理、缺陷管理、用例管理、计划发布等功能&#xff0c;完整覆盖了研发项目管理的核心流程。 禅道项目管理系统…

如何使用 Internet Download Manager (IDM) 来加速和优化你的下载体验 IDM 6.41下载神器

在当今信息爆炸的时代&#xff0c;下载文件和媒体内容已成为我们日常生活的一部分。无论是工作学习还是娱乐休闲&#xff0c;我们都需要从互联网上下载各种资源。为了提高下载效率和确保文件完整性&#xff0c;选择一款优秀的下载管理软件至关重要。Internet Download Manager …

PotatoPie 4.0 实验教程(21) —— FPGA实现摄像头图像二值化(RGB2Gray2Bin)

PotatoPie 4.0开发板教程目录&#xff08;2024/04/21&#xff09; 为什么要进行图像的二值化&#xff1f; 当我们处理图像时&#xff0c;常常需要将其转换为二值图像。这是因为在很多应用中&#xff0c;我们只对图像中的某些特定部分感兴趣&#xff0c;而不需要考虑所有像素的…

JavaScript 中的IF判断竟然可以这样写,效率更高

当然&#xff0c;它们是创建控制流的一种简单而方便的方式&#xff0c;但你可以写下数十亿行条件性的 JavaScript 代码&#xff0c;而不需要一个 if 语句。 而且有很多情况下&#xff0c;使用不同的结构会更清晰地展示你想要做的事情 —— 只要我们还在为人类编写代码&#xf…

深度学习系列65:数字人openHeygen详解

1. 主流程分析 从inference.py函数进入&#xff0c;主要流程包括&#xff1a; 1&#xff09; 使用cv2获取视频中所有帧的列表&#xff0c;如下&#xff1a; 2&#xff09;定义Croper。核心代码为69行&#xff1a;full_frames_RGB, crop, quad croper.crop(full_frames_RGB)。…