前端技能包

ES6


<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><script>// 变量定义var a=1;let b=5;  // 现在使用let 定义变量// 对象解构let person={"name":"dc","age":25}console.log(person.name); // 原操作:对象.属性名console.log(person.age);let {name,age}=person; // 对象解构console.log(name);console.log(age);// 模板字符串let info=`你好,${name}。今年${age}`// promisefunction get(url) {return new Promise((resolve, reject) => {$.ajax({url: url,type: "GET",success(result) {resolve(result);},error(error) {reject(error);}});});}// Async函数async function func1() {// 业务、计算let x = 101;if (x % 2 === 0) {return x;} else {throw new Error("x不是偶数");}}func1().then(data => console.log("then", data)).catch(err => console.log("err", err)); // 调用func1// await + asyncasync function func2() {let x = await func1(); // await同步等待func1() 结果后 结束console.log("x", x);}func2();// ES6模块化// user.jsconst user = {username: "张三",age: 18}function isAdult(age){if (age > 18) {console.log('成年人');} else {console.log('未成年');}}// main.js// exportexport { user, isAdult }import { user, isAdult } from './lib/user.js';isAdult(user.age);</script>
</body>
</html>

npm 包管理工具

在这里插入图片描述

Vue3

在这里插入图片描述


$ npm create viteNeed to install the following packages:create-vite
Ok to proceed? (y) y✔ Project name: · vite-project
✔ Select a framework: · vue
✔ Select a variant: · vueScaffolding project in ./vite-project...Done. Now run:cd vite-projectnpm installnpm run dev

cd vite-project
npm install
npm run dev

在这里插入图片描述

插值


<script setup>
let name = "张三"let car = {brand: "小米",price: 999
}
</script><template><!-- {{val}}  插值表达式,页面任何位置取值--><h2>姓名:{{name}}</h2><h2>品牌:{{car.brand}}</h2><h2>价格:{{car.price}}</h2>
</template><style scoped>
</style>

常用指令

v-html

// 2. 指令
let msg = "<p style='color: red'>你好</p>"<template><h2>姓名:{{name}}</h2><h2>品牌:{{car.brand}}</h2><h2>价格:{{car.price}}</h2><div v-html="msg"></div>
</template>

在这里插入图片描述


<script setup>//  指令: v-xxx;
// 基础指令: v-html、v-text
// 事件指令: v-onlet msg = "<p style='color: red'>你好</p>";function buy() {alert("购买成功");
}</script><template><h2>姓名:{{name}}</h2><h2>品牌:{{car.brand}}</h2><h2>价格:{{car.price}}</h2><button @click="buy">购买</button><div v-html="msg"></div><div>{{msg}}</div><div v-text="msg"></div></template>

在这里插入图片描述

v-if 、v-for

<span style="color: green" v-if="car.price < 1000"> 便宜</span>
<span style="color: red" v-if="car.price >= 1000"> 太贵</span>
<li v-for="(f, i) in fruits">{{ f }} ==> {{ i }}</li>

v-bind


<script>
// 3. 属性绑定:v-bind
let url = "https://www.baidu.com";
</script><template><a v-bind:href="url">Go !</a>
</template>

响应式变化:数据的变化 可以更新到页面效果上 ref()、reactive()


<script>// 3. 属性绑定:v-bind;默认数据 不具备响应式特性let url = ref("https://www.example.com");// 响应式特性:数据的变化 可以更新到页面效果上function changeUrl() {console.log(url);// 改变的时候需要 url.valueurl.value = "https://www.atguigu.com";}// ref():// 1. 把基本数据使用 ref() 包装成响应式数据// 2. 使用 代理对象.value = ""// 3. 页面取值、属性绑定 直接 {{url}}// 传递对象reactive()const money = reactive({money: 1000,name: "parent",});</script><template><a :href="url" :abc="url">Go ! {{ url }}</a><button @click="changeUrl">改变地址</button>
</template>

表单绑定 v-model :双向绑定


<script setup>
import { reactive } from "vue";const data = reactive({username: "zhangsan",agree: true,hobby: [],gender: "女",degree: "",course: []
})
</script><template><p style="background-color: azure"><label>姓名(文本框):</label><input v-model="data.username"/></p>
</template>

计算属性

<script setup>import { ref, computed } from 'vue';// 假设 car 和 num 是已经定义的响应式对象或引用const car = {price: 10000 // 示例价格};const num = ref({ value: 1 }); // 示例数量// 计算总价const totalPrice = computed(() => car.price * num.value);</script><template><!-- <button v-on:click="buy">购买</button> --><button @click.once="buy">购买 {{ totalPrice }}</button>
</template>

监听 watch()


<script>const num = ref({ value: 1 });// 监听: watch/watchEffect// num数字发生变化时,开启回调函数watch(num, (value, oldValue, onCleanup) => {console.log("value", value);console.log("oldValue", oldValue);if (num.value > 3) {alert("超出限购数量");num.value = 3;}});</script>

<script>// 监听一堆事件watchEffect(() => {if (num.value > 3) {alert("超出限购数量");num.value = 3;}if (car.price > 11000) {alert("太贵了");}});</script>

生命周期 mounted()


<script setup>import { ref, onMounted } from 'vue';// 定义一个响应式变量 countconst count = ref(0);// 假设 elementId 是一个已定义的元素 IDconst elementId = "ds";// onMounted 生命周期钩子onMounted(() => {console.log("挂载完成!!!")});
</script>

组件传值

父传子 v-bind

Son


<script setup>
// 1、定义属性
let props = defineProps( ['money'] );</script><template><div style="background-color: #646cff; color: white;"><h3>Son</h3><!--  只读值 read only--><div>账户:{{ props.money }}</div></div>
</template><style scoped>
</style>

Father


<script setup>
import Son from "./Son.vue";
import { ref } from "vue";// 1、父传子,单向数据流,子变了 父亲的不会变
const money = ref(100);</script><template><div style="background-color: #f9f9f9"><h2>Father</h2><!--  属性绑定传递值--><Son :money="money" /></div>
</template><style scoped>
</style>
let props = defineProps({money: {type: Number,required: true,default: 200},books: Array
});

子传父 emit


<script setup>
import Son from "./Son.vue";// 1、父传子
const data = reactive({money: 1000,name: "parent",
});function moneyMinis(arg) {// alert("感知到儿子买了棒棒糖" + arg)data.money += arg;
}</script><template><div style="background-color: #f9f9f9"><h2>Father</h2><Son :money="data.money" @buy="moneyMinis"/><!-- <Son v-bind="data"/> --></div>
</template><style scoped>
</style>

<script setup>// 1、定义属性
let props = defineProps( ['money'] );
// 2、使用 emit: 定义事件
const emits = defineEmits(['buy']);function buy() {// props.money -= 5; // 这里不直接修改 props,而是通过 emit 通知父组件emits('buy', -5);
}
</script><template><div style="background-color: #646cff; color: white"><h3>Son</h3><div>账户:{{ props.money }}</div><button @click="buy">买棒棒糖</button></div>
</template><style scoped>
</style>

插槽

Father

<script setup>
</script><template><div style="background-color: #f9f9f9"><h2>Father</h2><Son ><template v-slot:title>哈哈SonSon</template></Son></div>
</template><style scoped>
</style>

Son


<script setup>
</script><template><div style="background-color: #646cff; color: white"><h3><slot name="title">哈哈Son</slot></h3><button @click="buy"><slot name="btn"/></button></div>
</template><style scoped>
</style>

Vue - Router

npm install vue-router

在这里插入图片描述

在 src/router/index.js 中配置路由:

index.js


// 引入必要的模块
import { createRouter, createWebHashHistory } from 'vue-router';
import Home from '../views/Home.vue'; // 假设 Home 组件位于 views 文件夹下
import Hello from '../views/Hello.vue'; // 假设 Hello 组件位于 views 文件夹下// 定义路由规则
const routes = [{ path: '/', component: Home },{ path: '/hello', component: Hello },{path: '/haha',component: () => import('../views/Haha.vue') // 动态导入 Haha 组件}
];// 创建路由器
const router = createRouter({history: createWebHashHistory(), // 使用 hash 模式routes // 路由规则
});// 导出路由器
export default router;

在 src/main.js 中使用路由器:

main.js

import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
import router from './router'let app = createApp(App);// 1、使用 router
app.use(router)
app.mount('#app');

在 App.vue 中使用 和


<template><router-link to="/">首页</router-link><router-link to="/hello">Hello</router-link><router-link to="/haha">Haha</router-link><!-- ... --><hr /><router-view></router-view><!-- ... --><!-- 1、整合 vue-router --><!-- 2、配置 vue-router --><!--     配置路由表 --><!--     创建路由器 --><!-- 3、Vue 实例使用 router --><!-- 4、配置 router-link 和 router-view -->
</template>

Axios

发送请求

App.vue


<script setup>
import axios from 'axios'function getInfo() {axios.get("http://43.139.239.29/get").then(resp => {console.log(resp.data);// config: 请求配置// data: 服务器的响应数据   √√√// headers: 响应头// request: 请求对象// status: 响应状态码// statusText: 响应描述文本})
}function getInfoParam() {axios.get("http://43.139.239.29/get", {params: {id: 1,username: 'zhangsan'}}).then(resp => {console.log(resp);});
}function postInfoParam() {// 数据会被自动转为jsonaxios.post("http://43.139.239.29/post",{id: 222,username: 'zhangsan',age: 18}).then(resp => {console.log(resp);});
}</script><template><button @click="getInfo">GET请求</button><button @click="getInfoParam">GET请求 带参数</button><button @click="postInfoParam">POST 请求</button>
</template><style scoped>
</style>

实例配置

index.js

import axios from 'axios';const http = axios.create({baseURL: 'http://43.139.239.29',timeout: 1000,headers: { 'X-Custom-Header': 'foobar' }
});export default http;

App.vue


<script setup>
import http from './index'function getInfo() {http.get("/get").then(resp => {console.log(resp.data);// config: 请求配置// data: 服务器的响应数据   √√√// headers: 响应头// request: 请求对象// status: 响应状态码// statusText: 响应描述文本})
}</script><template><button @click="getInfo">GET请求</button>
</template><style scoped>
</style>

拦截器

index.js


import axios from 'axios';// 创建自定义 Axios 实例
const http = axios.create({baseURL: 'http://43.139.239.29',timeout: 1000,headers: { 'X-Custom-Header': 'foobar' }
});// 添加请求拦截器
http.interceptors.request.use(function (config) {// 在发送请求之前做些什么return config;},function (error) {// 对请求错误做些什么console.log("请求错误", error);return Promise.reject(error);}
);// 添加响应拦截器
http.interceptors.response.use(function (response) {// 2xx 范围内的状态码都会触发该函数。// 对响应数据做点什么// 返回响应数据主体内容return response.data;},function (error) {// 超出 2xx 范围的状态码都会触发该函数。// 对响应错误做点什么console.log("响应错误", error);ElMessage.error("服务器错误" + error.message); // 使用 Element UI 的 Message 组件显示错误消息return Promise.reject(error);}
);// 导出 http 实例
export default http;

在这里插入图片描述

Pinia

类似后端的Redis

在这里插入图片描述

npm install pinia

money.js

import { defineStore } from 'pinia';// 定义一个 money存储单元
export const useMoneyStore = defineStore('money', {state: () => ({ money: 100 }),getters: {rmb: (state) => state.money,usd: (state) => state.money * 0.14,eur: (state) => state.money * 0.13,},actions: {win(arg) {this.money += arg;},pay(arg) {this.money -= arg;}},
});

Wallet.vue


<script setup>
import { useMoneyStore } from './money.js'
let moneyStore = useMoneyStore();
</script><template><div><h2>¥: {{moneyStore.rmb}}</h2><h2>$: {{moneyStore.usd}}</h2><h2>€: {{moneyStore.rmb}}</h2></div>
</template><style scoped>
div {background-color: #f9f9f9;
}
</style>

game.vue


<script setup>
import { useMoneyStore } from './money.js';let moneyStore = useMoneyStore();function guaguale() {moneyStore.win(100);
}function bangbang() {moneyStore.pay(5);
}
</script><template><button @click="guaguale">刮刮乐</button><button @click="bangbang">买棒棒糖</button>
</template><style scoped>
</style>

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

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

相关文章

大数据(1) 大数据概述

一、大数据时代 1.三次信息化浪潮 二、什么是大数据 1.四个特点 4V&#xff1a;数据量&#xff08;Volume&#xff09;大、数据类型&#xff08;Variety&#xff09;繁多、处理速度&#xff08;Velocity&#xff09;快、价值密度&#xff08;Value&#xff09;低 三、大数据…

element-plus 单选组件 el-radio,选不上,又没报错,直接复制官网也不行解决方案

在使用 Vue 框架开发项目时&#xff0c;Element UI 是常用的组件库。最近在开发中遇到了 Element 单选框组件el-radio的双向绑定问题&#xff0c;直接复制element官网上的的案例下来也是不得&#xff0c;经过调试和探索&#xff0c;终于找到了解决方案&#xff0c;特此记录分享…

使用 Amazon Q Developer CLI 快速搭建各种场景的 Flink 数据同步管道

在 AI 和大数据时代&#xff0c;企业通常需要构建各种数据同步管道。例如&#xff0c;实时数仓实现从数据库到数据仓库或者数据湖的实时复制&#xff0c;为业务部门和决策团队分析提供数据结果和见解&#xff1b;再比如&#xff0c;NoSQL 游戏玩家数据&#xff0c;需要转换为 S…

开疆智能Ethernet/IP转Modbus网关连接质量流量计配置案例

首先设置modbus从站的485参数&#xff0c;确保网关和从站的485参数保持一致。 设置完成后打开网关配置软件并新建项目 先设置网关在Ethernet一侧的IP地址以及数据转换长度。 设置网关的Modbus参数如波特率9600无校验8数据位&#xff08;无校验选8&#xff0c;有校验选9&#xf…

多智能体MPE环境遇到的若干问题

最近学习MADDPG算法&#xff0c;用MPE环境来测试算法性能。于是便下载了pettingzoo包&#xff0c;运行了simple_tag_v3环境&#xff0c;此环境中有猎人、逃亡者和障碍物。 问题1: MPE中的simple_tag_v3环境&#xff0c;在渲染时看似移动的问题 由于相机视角跟随导致的视觉错觉…

[特殊字符] FFmpeg 学习笔记

一、FFmpeg 简介 FFmpeg 是一个开源跨平台的视频和音频处理工具&#xff0c;支持录制、转换、流处理等功能。 官网&#xff1a;https://ffmpeg.org 安装命令&#xff08;macOS&#xff09;&#xff1a; brew install ffmpeg二、基本命令结构 ffmpeg -i 输入文件 [参数] 输出…

leetcode Top100 238. 除自身以外数组的乘积|数组系列

题目链接&#xff1a;238. 除自身以外数组的乘积 - 力扣&#xff08;LeetCode&#xff09; 238. 除自身以外数组的乘积|数组系列 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 …

【Liunx专栏_6】Linux线程概念与控制

目录 1、线程是什么&#xff1f;通过一个图来理解……2、Linux进程和线程&#xff1f;2.1、之间的关系和区别2.2、线程的优缺点&#xff1f; 3、线程的创建3.1、POSIX线程库3.2、创建线程3.3、PS查看运行的线程 4、线程的终止5、线程的等待6、线程分离7、线程封装 1、线程是什么…

「Java基本语法」标识符、关键字与常量

知识点解析 1&#xff0e;标识符&#xff08;Identifiers&#xff09;&#xff1a;用于命名类、方法、变量等。 标识符命名规则&#xff1a; 标识符由字母&#xff08;A-Z&#xff0c;a-z&#xff09;、数字&#xff08;0-9&#xff09;、下划线“_”或美元符号“$”组成。标…

Nginx Stream 层连接数限流实战ngx_stream_limit_conn_module

1.为什么需要连接数限流&#xff1f; 数据库/Redis/MQ 连接耗资源&#xff1a;恶意脚本或误配可能瞬间占满连接池&#xff0c;拖垮后端。防御慢速攻击&#xff1a;层叠式限速&#xff08;连接数&#xff0b;带宽&#xff09;可阻挡「Slow Loris」之类的 TCP 低速洪水。公平接入…

LLMs之Structured Output:vLLM 结构化输出指南—从约束生成到自动解析与高效实现

LLMs之Structured Output&#xff1a;vLLM 结构化输出指南—从约束生成到自动解析与高效实现 导读&#xff1a;随着大语言模型&#xff08;LLM&#xff09;在各类任务中的广泛应用&#xff0c;如何使其输出具备可控性、结构化与可解析性&#xff0c;成为实际部署中的关键问题。…

32 C 语言字符处理函数详解:isalnum、isalpha、iscntrl、isprint、isgraph、ispunct、isspace

1 isalnum() 函数 1.1 函数原型 #include <ctype.h>int isalnum(int c); 1.2 功能说明 isalnum() 函数用于检查传入的整数参数是否为 ASCII 编码的字母或数字字符&#xff08;A - Z、a - z、0 - 9&#xff0c;对应 ASCII 值 65 - 90、97 - 122、48 - 57&#xff09;。…

在网络排错中,经常会用到的操作命令和其作用

在网络排错中&#xff0c;经常会用到的操作命令和其作用 网络排错是确保网络连接正常运行的重要环节&#xff0c;通过使用一系列工具和命令&#xff0c;可以有效诊断和解决网络问题。以下是常用的网络排错命令及其作用&#xff1a; 1.ping ping 是一个用于测试主机之间连通性…

C++中友元(friend)高级应用和使用示例

下面列出几个 高级友元应用场景 与典型设计模式&#xff0c;并配以示例&#xff0c;帮助大家在实际项目中灵活运用 friend 机制。 1. ADL 友元注入&#xff08;“注入式友元”&#xff09; 场景&#xff1a;为某个类型定义非成员操作符&#xff08;如算术、流插入等&#xff0…

TCP相关问题 第一篇

TCP相关问题1 1.TCP主动断开连接方为什么需要等待2MSL 如上图所示:在被动链接方调用close&#xff0c;发送FIN时进入LAST_ACK状态&#xff0c;但未收到主动连接方的ack确认&#xff0c;需要被动连接方重新发送一个FIN&#xff0c;而为什么是2MSL&#xff0c;一般认为丢失ack在…

STM32启动文件学习(startup_stm32f40xx.s)

原代码 ;******************** (C) COPYRIGHT 2016 STMicroelectronics ******************** ;* File Name : startup_stm32f40xx.s ;* Author : MCD Application Team ;* version : V1.8.0 ;* date : 09-November-2016 ;* Desc…

uni-app学习笔记二十三--交互反馈showToast用法

showToast部分文档位于uniapp官网-->API-->界面&#xff1a;uni.showToast(OBJECT) | uni-app官网 uni.showToast(OBJECT) 用于显示消息提示框 OBJECT参数说明 参数类型必填说明平台差异说明titleString是提示的内容&#xff0c;长度与 icon 取值有关。iconString否图…

【Ragflow】26.RagflowPlus(v0.4.0):完善解析逻辑/文档撰写模式全新升级

概述 在历经半个月的间歇性开发后&#xff0c;RagflowPlus再次迎来一轮升级&#xff0c;正式发布v0.4.0。 开源地址&#xff1a;https://github.com/zstar1003/ragflow-plus 更新方法 下载仓库最新代码&#xff1a; git clone https://github.com/zstar1003/ragflow-plus.…

【论文解读】Toolformer: 语言模型自学使用工具

1st author: ‪Timo Schick‬ - ‪Google Scholar‬ paper: Toolformer: Language Models Can Teach Themselves to Use Tools | OpenReview NeurIPS 2023 oral code: lucidrains/toolformer-pytorch: Implementation of Toolformer, Language Models That Can Use Tools, by…

Spring 官方推荐构造函数注入

1. 依赖关系明确 构造函数注入可以清晰地声明类的依赖关系&#xff0c;所有必需的依赖项都通过构造函数参数传递&#xff0c;使得代码的可读性更高。这种方式让类的使用者能够直观地了解类的依赖&#xff0c;而不需要通过注解或反射来猜测。 2. 增强代码健壮性 构造函数注入…