前端技能包

news2025/6/9 20:50:14

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}`



    // promise
    function 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 + async
    async function func2() {
        let x = await func1(); // await同步等待func1() 结果后 结束
        console.log("x", x);
    }
    func2();



    // ES6模块化

    // user.js
    const user = {
        username: "张三",
        age: 18
    }

    function isAdult(age){
        if (age > 18) {
            console.log('成年人');
        } else {
            console.log('未成年');
        }
    }

    // main.js
    // export
    export { user, isAdult }

    import { user, isAdult } from './lib/user.js';
    isAdult(user.age);


</script>
</body>
</html>

npm 包管理工具

在这里插入图片描述

Vue3

在这里插入图片描述


$ npm create vite

Need to install the following packages:
  create-vite
Ok to proceed? (y) y

✔ Project name: · vite-project
✔ Select a framework: · vue
✔ Select a variant: · vue

Scaffolding project in ./vite-project...

Done. Now run:

  cd vite-project
  npm install
  npm 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-on

let 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.value
	    url.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';

    // 定义一个响应式变量 count
    const count = ref(0);

    // 假设 elementId 是一个已定义的元素 ID
    const 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() {
  // 数据会被自动转为json
  axios.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.coloradmin.cn/o/2405824.html

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

相关文章

【笔记】PyCharm 使用问题反馈与官方进展速览

#工作记录 https://youtrack.jetbrains.com/issue/IJPL-190308 【笔记】记一次PyCharm的问题反馈_the polyglot context is using an implementation th-CSDN博客 【笔记】与PyCharm官方沟通解决开发环境问题-CSDN博客 与 JetBrains 官方沟通记录&#xff08;PyCharm 相关问题…

操作系统期末版

文章目录 概论处理机管理进程线程处理机调度生产者消费者问题 死锁简介死锁的四个必要条件解决死锁的方法 存储管理链接的三种方式静态链接装入时动态链接运行时链接 装入内存的三种方式绝对装入可重定位装入动态运行时装入 覆盖交换存储管理方式连续分配**分段存储管理方式***…

自然语言处理——语言模型

语言模型 n元文法参数估计数据平滑方法加1法 神经网络模型提出原因前馈神经网络&#xff08;FNN&#xff09;循环神经网络 n元文法 大规模语料库的出现为自然语言统计处理方法的实现提供了可能&#xff0c;统计方法的成功应用推动了语料库语言学的发展。 语句 &#x1d460; …

数据库管理与高可用-MySQL高可用

目录 #1.1什么是MySQL高可用 1.1.1MySQL主主复制keepalivedhaproxy的高可用 1.1.2优势 #2.1MySQL主主复制keepalivedhaproxy的实验案例 1.1什么是MySQL高可用 MySQL 高可用是指通过技术手段确保 MySQL 数据库在面临硬件故障、软件错误、网络中断、人为误操作等异常情况时&…

免费工具-微软Bing Video Creator

目录 引言 一、揭秘Bing Video Creator 二、轻松上手&#xff1a;三步玩转Bing Video Creator 2.1 获取与访问&#xff1a; 2.2 创作流程&#xff1a; 2.3 提示词撰写技巧——释放AI的想象力&#xff1a; 三、核心特性详解&#xff1a;灵活满足多样化需求 3.1 双重使用模…

【笔记】解决MSYS2安装后cargo-install-update.exe-System Error

#工作记录 cargo-install-update.exe-System Error The code execution cannot proceed because libgit2-1.9.dll wasnot found. Reinstalling the program may fix this problem. …

银行卡二三四要素实名接口如何用PHP实现调用?

一、什么是银行卡二三四要素实名接口 输入银行卡卡号、姓名、身份证号码、手机号&#xff0c;验证此二三四要素是否一致。 二、核心价值 1. 提升风控效率 通过实时拦截冒用身份开户&#xff0c;银行卡二三四要素实名接口显著降低了人工审核成本&#xff0c;效率提升50%以上…

itvbox绿豆影视tvbox手机版影视APP源码分享搭建教程

我们先来看看今天的主题&#xff0c;tvbox手机版&#xff0c;然后再看看如何搭建&#xff1a; 很多爱好者都希望搭建自己的影视平台&#xff0c;那该如何搭建呢&#xff1f; 后端开发环境&#xff1a; 1.易如意后台管理优化版源码&#xff1b; 2.宝塔面板&#xff1b; 3.ph…

网页抓取混淆与嵌套数据处理流程

当我们在网页抓取中&#xff0c;遇到混淆和多层嵌套的情况是比较常见的挑战。混淆大部分都是为了防止爬虫而设计的&#xff0c;例如使用JavaScript动态加载、数据加密、字符替换、CSS偏移等。多层嵌套则可能是指HTML结构复杂&#xff0c;数据隐藏在多层标签或者多个iframe中。 …

高性能MYSQL:复制同步的问题和解决方案

一、复制的问题和解决方案 中断MySQL的复制并不是件难事。因为实现简单&#xff0c;配置相当容易&#xff0c;但也意味着有很多方式会导致复制停止&#xff0c;陷入混乱并中断。 &#xff08;一&#xff09;数据损坏或丢失的错误 由于各种各样的原因&#xff0c;MySQL 的复制…

大话软工笔记—架构模型

1. 架构模型1—拓扑图 &#xff08;1&#xff09;拓扑图概念 拓扑图&#xff0c;将多个软件系统用网络图连接起来的表达方式。 &#xff08;2&#xff09;拓扑图分类 总线型结构 比较普遍采用的方式&#xff0c;将所有的系统接到一条总线上。 星状结构 各个系统通过点到…

javaweb -html -CSS

HTML是一种超文本标记语言 超文本&#xff1a;超过了文本的限制&#xff0c;比普通文本更强大&#xff0c;除了文字信息&#xff0c;还可以定义图片、音频、视频等内容。 标记语言&#xff1a;由标签"<标签名>"构成的语言。 CSS:层叠样式表&#xff0c;用于…

spring task定时任务快速入门

spring task它基于注解和配置&#xff0c;可以轻松实现任务的周期性调度、延迟执行或固定频率触发。按照我们约定的时间自动执行某段代码。例如闹钟 使用场景 每月还款提醒&#xff0c;未支付的订单自动过期&#xff0c;收到快递后自动收货&#xff0c;系统自动祝你生日快乐等…

搭建nginx的负载均衡

1、编写一个configMap的配置文件 events {worker_connections 1024; # 定义每个worker进程的最大连接数 }http {# 定义通用代理参数&#xff08;替代proxy_params文件&#xff09;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-F…

Appium+python自动化(八)- 认识Appium- 下章

1、界面认识 在之前安装appium的时候说过我们有两种方法安装&#xff0c;也就有两种结果&#xff0c;一种是有界面的&#xff08;客户端安装&#xff09;&#xff0c;一种是没有界面的&#xff08;终端安装&#xff09;&#xff0c;首先我们先讲一下有界面的&#xff0c;以及界…

LabVIEW的MathScript Node 绘图功能

该VI 借助 LabVIEW 的 MathScript Node&#xff0c;结合事件监听机制&#xff0c;实现基于 MathScript 的绘图功能&#xff0c;并支持通过交互控件自定义绘图属性。利用 MathScript 编写脚本完成图形初始化&#xff0c;再通过LabVIEW 事件结构响应用户操作&#xff0c;动态修改…

每日Prompt:治愈动漫插画

提示词 现代都市治愈动漫插画风格&#xff0c;现代女子&#xff0c;漂亮&#xff0c;长直发&#xff0c;20岁&#xff0c;豆沙唇&#xff0c;白皙&#xff0c;气质&#xff0c;清纯现代都市背景下&#xff0c;夕阳西下&#xff0c;一位穿着白色露脐短袖&#xff0c;粉色工装裤…

6.8 note

paxos算法_初步感知 Paxos算法保证一致性主要通过以下几个关键步骤和机制&#xff1a; 准备阶段 - 提议者向所有接受者发送准备请求&#xff0c;请求中包含一个唯一的编号。 - 接受者收到请求后&#xff0c;会检查编号&#xff0c;如果编号比它之前见过的都大&#xff0c;就会承…

面试心得 --- 车载诊断测试常见的一些面试问题

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

跟进一下目前最新的大数据技术

搭建最新平台 40C64G服务器&#xff0c;搭建3节点kvm&#xff0c;8C12G。 apache-hive-4.0.1-bin apache-tez-0.10.4-bin flink-1.20.1 hadoop-3.4.1 hbase-2.6.2 jdk-11.0.276 jdk8u452-b09 jdk8终于可以不用了 spark-3.5.5-bin-hadoop3 zookeeper-3.9.3 trino…