Django_Vue3_ElementUI_Release_003_前端Vue3项目初始化

news2024/11/13 8:49:49

1. 概念扫盲

  1. Node.js是基于ChromeV8引擎,让JS在服务端运行的开发平台,就是JS的一种解释器
  2. WebPack就是模块打包机,把浏览器不能直接运行的拓展语言找到并打包为合适的格式给浏览器直接使用
  3. Vue基于WebPack构件项目的,并带有合理默认配置的,可以快速开发的完整系统
  4. npm就是JS的包管理工具

2. 环境准备

2.1 nodejs下载安装及配置

nodejs download

在这里插入图片描述

2.2 安装Vue脚手架

npm install -g @vue/cli

在这里插入图片描述

2.3 创建Vue3项目并运行

cd E:\project2024\shopping_car

vue create shopping_car_fore

cd shopping_car_fore

npm run serve

在这里插入图片描述
在这里插入图片描述

2.4 安装相关包

在这里插入图片描述

2.5 vue开发者必备vscode插件【2024最新】

在这里插入图片描述

https://blog.csdn.net/liyananweb/article/details/135958361

3. 一个小demo

3.1 public文件夹css,js等文件

在这里插入图片描述

3.2 index.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width,initial-scale=1.0">
        <!-- Favicon and Touch Icons-->
        <link rel="shortcut icon" href="xxyy.ico"/>
        <link rel="stylesheet" href="bootstrap.css">
        <title>数据平台</title>
    </head>
    <body>
        <div id="app"></div>
        <!-- Javascript Files -->
        <script src="jquery-3.3.1.js"></script>
        <script src="bootstrap.js"></script>
    </body>
</html>

3.3 配置main.js

// 导入Vue
import { createApp } from 'vue'
// 导入Vue扩展插件
import axios from 'axios'
import VueAxios from 'vue-axios'
import { createRouter, createWebHistory } from 'vue-router'
// 导入组件
import App from './App.vue'
// import Product from './components/Product.vue'
import Signin from './components/Signin.vue'

// 定义路由
const routes = [
  { path: '/', component: Signin },
  // { path: '/product', component: Product },
]
// 创建路由对象
const router = createRouter({
  // 设置历史记录模式
  history: createWebHistory(),
  // routes: routes的缩写
  routes,
})
// 创建Vue对象
const app = createApp(App)
// 将路由对象绑定到Vue对象
app.use(router)
// 将vue-axios与axios关联并绑定到Vue对象
app.use(VueAxios,axios)
// 挂载使用Vue对象
app.mount('#app')


3.4 app.vue

<template>
  <div id="app">
    <router-view/>
  </div>
</template>

<script>
export default {
  name: 'App'
}
</script>

3.5 Signin.vue

<template>
  <div class="main-layout card-bg-1">
    <div class="container d-flex flex-column">
      <div class="row no-gutters text-center align-items-center justify-content-center min-vh-100">
        <div class="col-12 col-md-6 col-lg-5 col-xl-4">
          <h1 class="font-weight-bold">用户登录</h1>
          <p class="text-dark mb-3">民主、文明、和谐、自由、平等</p>
          <div class="mb-3">
            <div class="form-group">
              <label for="username" class="sr-only">账号</label>
              <input type="text" class="form-control form-control-md" id="username" placeholder="请输入账号"
                     v-model="username">
            </div>
            <div class="form-group">
              <label for="password" class="sr-only">密码</label>
              <input type="password" class="form-control form-control-md" id="password"
                     placeholder="请输入密码" v-model="password">
            </div>
            <button class="btn btn-primary btn-lg btn-block text-uppercase font-weight-semibold" type="submit"
                    @click="login()">登录
            </button>
          </div>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
export default {
  name: 'Signin',
  data () {
    return {
      username: '',
      password: ''
    }
  },
  methods: {
    login: function () {
      // 判断是否输入账号
      if (this.username.length > 0 && this.password.length > 0) {
        // 向后端发送POST请求
        let data = new FormData();
        data.append('username',this.username);
        data.append('password',this.password);
        this.axios.post('http://127.0.0.1:8000/', data).then((res)=> {
          // POST请求发送成功则获取响应结果的result
          // 如果result为true,则说明存在此用户
          if (res.data.result) {
            // 将访问路由chat,并设置参数
            this.$router.push({
              path: '/product'
            })
          } else {
            // 当前用户不存在后端的数据库
            window.alert('账号不存在或异常')
            // 清空用户输入的账号和密码
            this.username = ''
            this.password = ''
          }}).catch(function () {
          // PSOT请求发送失败
          window.alert('账号获取失败')
          // 清空用户输入的账号和密码
          this.username = ''
          this.password = ''
        })
      } else {
        // 提示没有输入账号或密码
        window.alert('请输入账号或密码')
      }
    }
  }
}
</script>

<style scoped>
  .text-center {
    text-align: center!important;
  }
  .min-vh-100 {
      min-height: 100vh!important;
  }
  .align-items-center {
      align-items: center!important;
  }
  .justify-content-center {
      justify-content: center!important;
  }
  .no-gutters {
      margin-right: 0;
      margin-left: 0;
  }
  .row {
      display: flex;
      flex-wrap: wrap;
      margin-right: -15px;
      margin-left: -15px;
  }
  *, :after, :before {
      box-sizing: border-box;
  }
</style>

3.6 如碰到报错

error Component name “index” should always be multi-word vue/multi-word-component-names

解决方案
其一、在项目的根目录找到vue.config.js文件,没有就新创建;
其二、需要添加的代码为:
在这里插入图片描述

3.7 运行效果

在这里插入图片描述

3.8 总结vue运行原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 正式开始项目

4.1 创建Vue3项目并运行

cd E:\project2024\shopping_car

vue create shopping_car_fore

cd shopping_car_fore

npm run serve

4.2配置vue.config.js

const path = require('path')
module.exports = {
  publicPath: '/',
  outputDir: 'dist',
  assetsDir: 'static',
  productionSourceMap: false,
  devServer: {
    hot: true,
    port: 8010,
    open: true,
    proxy: {
      '/': {
        target: 'http://127.0.0.1:8000/',
        changeOrigin: true,
        pathRewrite: { '^/': '' },
      },
    },
  },
  configureWebpack: {
    name: 'system',
    resolve: {
      alias: {
        "~@": __dirname,
        "@": path.resolve(__dirname, "./src")
      }
    }
  },
}

4.3 public文件夹中放入文件:css,js,img,layui

在这里插入图片描述

4.4 src文件夹中创建项目文件夹

axios:配置vue-axios
router:配置和定义Vue的路由信息
store:配置vuex,实现vue状态管理
sytle.css:编写异常页面的样式,仅在异常页面使用,因此不能放在public的css文件夹
在这里插入图片描述

4.4 配置Axios和Vuex

4.4.1 安装

npm i axios vue-axios

4.4.2 axios中创建index.js

import axios from 'axios'

axios.defaults.baseURL = '/'  //设置HTTP请求地址
axios.defaults.headers.post["Content-Type"] = 'application/json' //设置POST请求的数据类型
axios.defaults.timeout = 60000 //设置HTTP请求超时,单位是毫秒
axios.defaults.withCredentials = true; //默认false,代表跨域请求不提供凭据

export default axios

在这里插入图片描述

4.5 实现vue数据持久化

4.5.1 安装

npm i vuex vuex-persistedstate

在这里插入图片描述

4.5.2 store中创建index.js

在这里插入图片描述

import {createStore} from 'vuex'  //从Vuex导入函数createStore并实例化生成store对象
import createPersistedState from "vuex-persistedstate";


const store = createStore({
    state: {  //设置Vuex需要保存的数据
        lookImgUrl: 'http://127.0.0.1:8000',
        username: '',
        last_login: ''
    },
    mutations: {  //修改参数state的数据,并且只能同步执行
        setUserName(state, username){
            state.username = username
        },
        setLastLogin(state, last_login){
            state.last_login = last_login
        },
    },
    actions: {}, // 解决参数mutations无法执行的异步问题
    modules: {}, // 用于模块化处理
    // 所有数据缓存到本地
    plugins: [createPersistedState()], //用于为Vuex引入插件
})
export default store

4.6 编写路由

4.6.1 安装vue-router

npm i vue-router

在这里插入图片描述

4.6.2 编写router/index.js

在这里插入图片描述

import {createRouter, createWebHashHistory} from 'vue-router'
// import Home from '../components/Home.vue'
// import Commodity from '../components/Commodity.vue'
// import Detail from '../components/Detail.vue'
// import Shopper from '../components/Shopper.vue'
import Login from '../components/Login.vue'
// import Shopcart from '../components/Shopcart.vue'
// import Error from '../components/Error.vue'

// 定义路由
const routes = [
    // {path: '/', component: Home, meta: {title: '首页'}},
    // {path: '/commodity', component: Commodity, meta: {title: '商品列表页'}},
    // // :id是设置路由变量
    // {path: '/commodity/detail/:id', component: Detail, meta: {title: '商品详细页'}},
    // {path: '/shopper', component: Shopper, meta: {title: '个人中心页'}},
    {path: '/shopper/login', component: Login, meta: {title: '用户登录页'}},
    // {path: '/shopper/shopcart', component: Shopcart, meta: {title: '我的购物车'}},
    // // 路由匹配
    // {path: '/:pathMatch(.*)*', component: Error, meta: {title: '页面丢失'}},
]

// 创建路由对象
const router = createRouter({
    // 设置历史记录模式
    history: createWebHashHistory(),
    // routes: routes的缩写
    routes,
})
export default router

4.7 编写组件

4.7.1 基础组件base.vue

<template>
    <div class="header">
        <div class="headerLayout w1200">
            <div class="headerCon">
                <h1 class="mallLogo">
                    <a href="/" title="首页">
                        <img src="img/logo.png">
                    </a>
                </h1>
                <div class="mallSearch">
                    <div class="layui-form">
                        <input type="text" v-model="search" required lay-verify="required" autocomplete="off"
                               class="layui-input"
                               placeholder="请输入需要的商品">
                        <button class="layui-btn" lay-submit lay-filter="formDemo" @click="mySearch">
                            <i class="layui-icon layui-icon-search"></i>
                        </button>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="content content-nav-base" :class="activation">
        <div class="main-nav">
            <div class="inner-cont0">
                <div class="inner-cont1 w1200">
                    <div class="inner-cont2">
                        <router-link :to="`/`" :class="activation == '' ?'active':''">首页</router-link>
                        <router-link :to="`/commodity`" :class="activation == 'commodity' ?'active':''">所有商品
                        </router-link>
                        <router-link :to="`/shopper/shopcart`" :class="activation == 'shopcart' ?'active':''">购物车
                        </router-link>
                        <router-link :to="`/shopper`" :class="activation == 'shopper' ?'active':''">个人中心</router-link>
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>

<script>
    export default {
        data() {
            return {
                search: ''
            }
        },
        props: {
            activation: {
                type: String,
                default: ''
            },
        },
        methods: {
            // 搜索商品
            mySearch: function () {
                this.$router.push({path: '/commodity', query: {search: this.search, page: 1}})
            },
        }
    }
</script>

<style scoped>

</style>

4.7.2 底边栏footer.vue

<template>
    <div class="footer">
        <div class="ng-promise-box">
            <div class="ng-promise w1200">
                <p class="text">
                    <a class="icon1" href="javascript:;">7天无理由退换货</a>
                    <a class="icon2" href="javascript:;">满99元全场免邮</a>
                    <a class="icon3" style="margin-right: 0" href="javascript:;">100%品质保证</a>
                </p>
            </div>
        </div>
        <div class="mod_help w1200">
            <p>
                <a href="javascript:;">关于我们</a>
                <span>|</span>
                <a href="javascript:;">帮助中心</a>
                <span>|</span>
                <a href="javascript:;">售后服务</a>
                <span>|</span>
                <a href="javascript:;">母婴资讯</a>
                <span>|</span>
                <a href="javascript:;">关于货源</a>
            </p>
        </div>
    </div>
</template>

<script>
    export default {
        name: "Footer"
    }
</script>

<style scoped>

</style>

4.8 实例化vue对象main.js

import { createApp } from 'vue'
import VueAxios from 'vue-axios'
import App from './App.vue'
import router from './router'
import store from './store'
import axios from './axios'
import base from './components/Base'
import footer from './components/Footer'

// 创建Vue对象
const app = createApp(App)
// 注册组件
app.component('base-page', base)
app.component('footer-page', footer)
// 将路由对象绑定到Vue对象
app.use(router)
app.use(store)
// 将vue-axios与axios关联并绑定到Vue对象
app.use(VueAxios, axios)
// 挂载使用Vue对象
app.mount('#app')

4.9 根组件app.vue

<template>
  <div id="app">
    <router-view/>
  </div>
</template>

<script>
export default {
  name: 'App'
}
</script>

4.10 默认首页index.html

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <title>母婴商城</title>
    <link rel="stylesheet" type="text/css" href="<%= BASE_URL %>css/main.css">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
    <link rel="stylesheet" type="text/css" href="<%= BASE_URL %>layui/css/layui.css">
    <script type="text/javascript" src="<%= BASE_URL %>layui/layui.js"></script>
</head>
<body>

<div id="app"></div>

</body>
</html>

4.11 业务组件

4.11.1 用户注册和登陆页面,login.vue

<template>
    <base-page :activation="activation"></base-page>
    <div class="login-bg">
        <div class="login-cont w1200">
            <div class="form-box">
                <div class="layui-form">
                    <legend>手机号注册登录</legend>
                    <div class="layui-form-item">
                        <div class="layui-inline iphone">
                            <div class="layui-input-inline">
                                <i class="layui-icon layui-icon-cellphone iphone-icon"></i>
                                <input name="username" id="username" v-model="username"
                                       lay-verify="required|phone" placeholder="请输入手机号"
                                       class="layui-input">
                            </div>
                        </div>
                        <div class="layui-inline iphone">
                            <div class="layui-input-inline">
                                <i class="layui-icon layui-icon-password iphone-icon"></i>
                                <input id="password" type="password" v-model="password"
                                       name="password" lay-verify="required|password"
                                       placeholder="请输入密码" class="layui-input">
                            </div>
                        </div>
                    </div>
                    <p>{{ msg }}</p>
                    <div class="layui-form-item login-btn">
                        <div class="layui-input-block">
                            <button class="layui-btn" lay-submit="" @click="loginAndRegister">注册/登录</button>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <footer-page></footer-page>
</template>

<script>
    export default {
        name: "Login",
        data() {
            return {
                activation: "login",
                msg: "",
                username: "",
                password: ""
            }
        },
        methods: {
            loginAndRegister: function () {
                console.log(this.username)
                console.log(this.password)
                this.axios.post('/api/v1/index/login/', {username: this.username, password: this.password}
                ).then(response => {
                    this.msg = response.data.msg
                    if (response.data.state === 'success') {
                        // 登录成功跳转个人主页
                        this.$store.commit('setUserName',this.username)
                        this.$store.commit('setLastLogin',response.data.last_login)
                        console.log(this.state)
                        this.$router.push({path: '/shopper'})
                    }
                })
                .catch(function (error) {
                    console.log(error)
                })
            }
        }
    }
</script>

<style scoped>

</style>

4.11.2 用户详情页面,shopper.vue

<template>
    <base-page :activation="activation"></base-page>
    <div class="info-list-box">
        <div class="info-list">
            <div class="item-box layui-clear">
                <div class="item">
                    <div class="img">
                        <img src="img/portrait.png">
                    </div>
                    <div class="text">
                        <h4>用户:{{ username }}</h4>
                        <p class="data">登录时间:{{ last_login }}</p>
                        <div class="left-nav">
                            <div class="title">
                                <router-link :to="`/shopper/shopcart`">我的购物车</router-link>
                            </div>
                            <div class="title" @click="logout"><a>退出登录</a></div>
                        </div>
                    </div>
                </div>
                <div class="item1">
                    <div class="cart">
                        <div class="cart-table-th">
                            <div class="th th-items">
                                <div class="th-inner">
                                    订单编号
                                </div>
                            </div>
                            <div class="th th-price">
                                <div class="th-inner">
                                    订单价格
                                </div>
                            </div>
                            <div class="th th-amount">
                                <div class="th-inner">
                                    购买时间
                                </div>
                            </div>
                            <div class="th th-sum">
                                <div class="th-inner">
                                    订单状态
                                </div>
                            </div>
                        </div>
                        <div class="OrderList">
                            <div class="order-content" id="list-cont">

                                <ul class="item-contents layui-clear" v-for="(o, key) in orders" :key="key">
                                    <li class="th th-items">{{ o.id }}</li>
                                    <li class="th th-price">¥{{ o.price }}</li>
                                    <li class="th th-amount">{{ o.created }}</li>
                                    <li class="th th-sum">{{ o.state }}</li>
                                </ul>

                            </div>
                        </div>

                    </div>
                </div>
            </div>
        </div>
        <div style="text-align: center;">
            <div class="layui-box layui-laypage layui-laypage-default" id="layui-laypage-1">
                <a href="javascript:;" class="layui-laypage-prev">上一页</a>
                <a href="javascript:;">1</a>
                <span class="layui-laypage-curr"><em class="layui-laypage-em"></em><em>2</em></span>
                <a href="javascript:;">3</a>
                <a href="javascript:;" class="layui-laypage-next">下一页</a>
            </div>
        </div>
    </div>
</template>

<script>
    export default {
        name: "Shopper",
        data() {
            return {
                activation: 'shopper',
                orders: [{}],
                username: this.$store.state.username,
                last_login: this.$store.state.last_login,
            }
        },
        mounted: function () {
            if (this.$store.state.username === '') {
                    this.$router.push({path: '/shopper/login'})
                }
            this.getcode(); //页面加载时自动执行
        },
        methods: {
            getcode: function () {
                var url = '/api/v1/shopper/home/'
                var href = window.location.href.split('?')[1]
                var t = new URLSearchParams('?' + href).get('t')
                if (t !== null){
                    url += '?t=' + t
                }
                console.log(url)
                this.axios.get(url).then(response => {
                    this.orders = response.data.data.orders
                    if (typeof(this.orders) == "undefined") {
                        this.orders = [{}]
                    }
                    console.log(this.orders)
                })
                    .catch(function (error) {
                        console.log(error)
                    })
            },
            logout: function () {
                this.axios.post('/api/v1/shopper/logout/').then(response => {
                    if (response.data.state === 'success') {
                        // 退出登录跳转个人主页
                        this.$store.commit('setUserName','')
                        this.$store.commit('setLastLogin','')
                        console.log(this.state)
                        this.$router.push({path: '/'})
                    }
                })
                    .catch(function (error) {
                        console.log(error)
                    })
            }
        },
    }

</script>

<style scoped>

</style>

4.11.3 报错页面,error.vue

<template>

<nav>
	<div class="menu">
		<p class="website_name">母婴商城</p>
	</div>
</nav>
<div class="wrapper">
	<div class="container">
		<div id="scene" class="scene" data-hover-only="false">
			<div class="circle" data-depth="1.2"></div>
			<div class="one" data-depth="0.9">
				<div class="content">
					<span class="piece"></span>
					<span class="piece"></span>
					<span class="piece"></span>
				</div>
			</div>
			<div class="two" data-depth="0.60">
				<div class="content">
					<span class="piece"></span>
					<span class="piece"></span>
					<span class="piece"></span>
				</div>
			</div>
			<div class="three" data-depth="0.40">
				<div class="content">
					<span class="piece"></span>
					<span class="piece"></span>
					<span class="piece"></span>
				</div>
			</div>
			<p class="p404" data-depth="0.50">404</p>
			<p class="p404" data-depth="0.10">404</p>
		</div>
		<div class="text">
			<article>
				<button><router-link :to="`/`">返回首页</router-link></button>
			</article>
		</div>
	</div>
</div>
</template>

<script>
    export default {
        name: "Error"
    }
</script>

<style src="@/assets/style.css" scoped>
</style>

4.12 测试页面

4.12.1 测试链接

http://localhost:8010/#/shopper/login

5. 常见报错

5.1 如果后台一直报错

“GET /ws HTTP/1.1”

则修改vue.config.js
在这里插入图片描述

5.2 后台接收不到数据

前端是这样的形式
在这里插入图片描述
报错要改成绿色方框的内容
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MoCo对比损失

MoCo&#xff08;Momentum Contrast&#xff0c;动量对比学习&#xff09;是一种自监督学习方法&#xff0c;由Facebook AI Research提出&#xff0c;主要用于无监督学习视觉表示。在MoCo中&#xff0c;对比损失&#xff08;Contrastive Loss&#xff09;扮演着至关重要的角色&…

在麒麟操作系统中查看进程运行时间

在麒麟操作系统中查看进程运行时间 1、使用ps命令查看进程运行时间1.1 基本命令结构1.2 示例&#xff1a;查看sshd进程的运行时间 2、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Linux操作系统中&#xff0c;包括麒麟&#xff08…

使用Mockito进行单元测试

1、单元测试介绍 Mockito和Junit是用于单元测试的常用框架。单元测试即&#xff1a;从最小的可测试单元&#xff08;如函数、方法或类&#xff09;开始&#xff0c;确保每个单元都能按预期工作。单元测试是白盒测试的核心部分&#xff0c;它有助于发现单元内部的错误。 单元测试…

【Hot100】LeetCode—84. 柱状图中最大的矩形

目录 1- 思路题目识别单调栈 2- 实现⭐84. 柱状图中最大的矩形——题解思路 3- ACM 实现 原题链接&#xff1a;84. 柱状图中最大的矩形 1- 思路 题目识别 识别1 &#xff1a;给定一个数组 heights &#xff0c;求解柱状图的最大面积 单调栈 使用 Stack 来实现&#xff0c;遍…

服务器上PFC配置丢失问题排查与解决方案

现象 基于nccl的多轨通信算力中心出现交换机端口出入方向丢包 分析 机间通信使用RoCE网络&#xff0c;为了避免因丢包导致大量重传报文影响训练性能&#xff0c;我们基于PFC和ECN在交换机和服务器配置搭建了无损网络&#xff0c;理论上是不允许丢包的&#xff0c;现在出现交…

时序差分法

一、时序差分法 时序差分是一种用来估计一个策略的价值函数的方法&#xff0c;它结合了蒙特卡洛和动态规划算法的思想。时序差分方法和蒙特卡洛的相似之处在于可以从样本数据中学习&#xff0c;不需要事先知道环境&#xff1b;和动态 规划的相似之处在于根据贝尔曼方程的思想&…

接口测试(十二)

一、前台、后台、数据库三者关系 fiddler抓包是抓取客户端 --> 服务端 发送的的请求接口 开N个网页&#xff0c;只要有对后端发送请求&#xff0c; fiddler是无差别抓取 F12只抓取当前页面的数据 二、接口概念 接口是什么&#xff1f;— 传递数据的通道 测试系统组件间接口…

CC2530实现按键控制LED

实现按钮控制LED1开启和关闭 1配置环境 2扩展资料 通用io和外设io 设置输入输出 设置输入模式 3实例代码 #include "ioCC2530.h"void delay(int n){int i,j;for(i0;i<n;i){for(j0;j<240;j){asm("NOP");asm("NOP");asm("NOP")…

改编pikachu的打靶经历(题目不全)

前言 题目很少&#xff0c;只做了一些。正常版本的&#xff0c;完整的pikachu可参考下面这个师傅写的 https://www.cnblogs.com/henry666/p/16947270.html xss &#xff08;get&#xff09;反射xss 先尝试 1 这里有长度限制&#xff0c;而且&#xff0c;我改了长度&#xf…

带通滤波反相衰减器电路

1 简介 该可调带通衰减器可在 10Hz 到 100kHz 的频率范围内将信号电平降低 40dB。它还支持独立控制直流输出电平。该设计选择的极点频率在通带之外&#xff0c;以最大限度地减小指定带宽范围内的衰减。 2 设计目标 2.1 输入 2.2 输出 ​​​ 2.3 电源 3 电路设计 根据设计…

TalkSphere项目介绍

TalkSphere项目介绍 文章目录 TalkSphere项目介绍一、前言二、技术栈及开发环境三、主要功能&#xff08;一&#xff09;用户登录与注册&#xff08;二&#xff09;用户历史消息展示&#xff08;三&#xff09;在线用户实时聊天 四、结语 一、前言 在线聊天室作为一个虚拟社交…

JS高级(三)、深浅拷贝,异常处理,this指向总结,改变this指向;节流和防抖

文章目录 一、深浅拷贝1. 浅拷贝&#xff1a;object.assign;解构赋值2. 深拷贝&#xff1a;递归函数、lodash的cloneDeep、JSON 二、异常处理1. throw2. try catch finally 三. this总结1、this的指向2、箭头函数this的指向3、改变函数this的指向 四. 节流和防抖1. 防抖(deboun…

【KiCAD安装教程】

【KiCAD安装教程】 KiCAD安装教程1. 访问KiCAD官网2. 选择版本3. 下载镜像4. 运行安装程序5. 开始安装6. 用户类型选择7. 组件选择8. 安装位置9. 安装过程10. 完成安装 KiCAD安装教程 KiCAD是一款开源的电子设计自动化&#xff08;EDA&#xff09;软件套件&#xff0c;主要用于…

Axure RP 9最新安装程序及汉化包下载(支持Win、Mac版,附下载安装教程)

数月前Axure RP官方已经发布了Axure RP 9的消息&#xff0c;并计划在今年夏天发布beta版本。新版Axure RP 9将是该工具向前迈出的重要一步&#xff0c;其中包括一系列广泛的改进&#xff1a;全面的UI修改&#xff0c;新的设计和文档功能以及前所未有的内部优化。我们已经彻底重…

【渗透测试】——Upload靶场实战(1-5关)

&#x1f4d6; 前言&#xff1a;upload-labs是一个使用 php 语言编写的&#xff0c;专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共21关&#xff0c;每一关都包含着不同上传方式。 目录 &#x1f552; 0. 安装phpstudy&a…

Modelsim SE-64 2020.4关闭优化

一、问题起源 本人由于之前一直使用AMD的板子&#xff0c;使用vivado自带仿真器进行功能仿真&#xff0c;由于自带的页面简洁和仿真时间自己还都可以接受就没有什么modelsim联合仿真&#xff0c;又因准备FPGA大赛的国产FPGA易灵思的题目&#xff0c;使用Efinity&#xff0b;Mod…

嵌入式开发与应用实验四——通过串口通信实现收发功能

一、实验目的 1. 了解 USART 的基本特性&#xff1b; 2. 掌握STM32串口通信的基本原理&#xff0c;了解异步通信的概念&#xff1b; 3. 掌握用库函数操作 USART 的方法&#xff0c;学习编程实现STM32的USART通信&#xff1b; 4. 掌握如何使用 STM32 的串口发送和接收数据。…

vue part 11

vuex的模块化与namespace 115_尚硅谷Vue技术_vuex模块化namespace_1_哔哩哔哩_bilibili 116_尚硅谷Vue技术_vuex模块化namespace_2_哔哩哔哩_bilibili vue-router路由 很常见的很重要的应用&#xff1a;Ajax请求&#xff0c;将响应的数据替换掉原先的代码从而实现不跳转页面…

监控系列之-Grafana面板展示及制作

一 Grafana设置添加数据源 1、设置Grafana中文显示 最后保存退出&#xff0c;数据源添加完毕 2、导入node_exporter主机监控面板 此处 有外网的情况下&#xff0c;直接输入对应面板的ID号&#xff0c;然后点击加载即可&#xff1b;无无外网的话&#xff0c;则考虑使用上传仪表…

钢材表面缺陷数据集以coco格式做好了数据集的划分,1200张训练集,600张验证集,对应的json文件也在里面

钢材表面缺陷数据集 以coco格式做好了数据集的划分&#xff0c;1200张训练集&#xff0c;600张验证集&#xff0c;对应的json文件也在里面。 钢材表面缺陷检测数据集营销介绍 项目背景&#xff1a; 钢材作为工业生产的重要原材料之一&#xff0c;其表面质量直接影响到成品的性…