vue3 父向子组件、子向父组件和兄弟组件之间通信的购物车案例

本文通过一个购物车案例,详细介绍了在Vue3中如何实现父组件向子组件、子组件向父组件以及兄弟组件之间的通信。涉及到的关键工具有VsCode、axios、Vite、bootstrap、mitt和less。项目创建过程包括安装所需依赖,如less、bootstrap、axios和mitt,并提供了项目源码,包括index.html、main.js、App.vue等文件,以及一个完整的项目地址供参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、需要的工具

二、项目目录

在这里插入图片描述

三、使用步骤

  • 在终端定位到需要创建项目的目录输入npm init vite-app demo-cart
  • npm install less -D安装less
  • 导入bootstrap
  • npm install axios安装axios
  • npm install mitt安装mitt

四、项目源码

  • index.html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <link rel="icon" href="/favicon.ico" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Vite App</title>
</head>
<body>
  <div id="app"></div>
  <script type="module" src="/src/main.js"></script>
</body>
</html>

  • main.js
import {
    createApp } from 'vue'
import App from './App.vue'
// 引入bootstrap
import './assets/css/bootstrap.min.css'
import './index.css'
//引入axios
import axios from 'axios'
// 导入封装的函数
import getTotall from './utils/compute.js'
axios.defaults.baseURL = 'https://applet-base-api-t.itheima.net/'
const app = createApp(App)
// 声明axios为全局属性
app.config.globalProperties.$http = axios
app.config.globalProperties.$getTotall = getTotall
app.mount('#app')

- index.css

```css
:root{
   
 font-size: 14px;
}
/*复选框的样式 */
.custom-checkbox .custom-control-label::before {
   
  border-radius: 10px;
} 
  • App.vue
<template>
  <div class="app-container">
    <Header title="我的购物车案例"></Header>
    <Goods :goodsList="goodsList" @getNewCount="getNewCount"></Goods>
    <Footer :goodsList="goodsList" @getFullSelect="fullSelect"></Footer>
  </div>
</template>

<script>
import Header from './components/EsHeader/Header.vue'
import Footer from './components/EsFooter/Footer.vue'
import Goods from './components/EsGoods/Goods.vue'

export default {
     
  name: 'App',
  data() {
     
    return {
      goodsList: [] }
  },
  created() {
     
    //  在创建阶段调用getGoodsList方法获取后台数据
    this.getGoodsList()
  },
  methods: {
     
    async getGoodsList() {
     
      // 使用全局挂载的属性$http发送ajax请求
      // 解构出data并赋值给res
      const {
      data: res } = await this.$http.get('api/cart')
      // 判断请求是否成功,并赋值给goodList
      if (res.status == 200) {
     
        console.log(res.message)
        this.goodsList = res.list
        // 初始化商品总价和商品总数
        this.$getTotall(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值