Vue2基础

1.环境准备

安装脚手架:全局安装

作用:在任何一个目录下都能通过vue命令创建项目

注意:低版本的node执行这行命令可能会报错,需要升级版本

npm install -g @vue/cli

创建项目

在指定的目录下,执行命令

作用:通过网页页面方式创建vue项目

vue ui

勾选 routevuex

点击创建之后,会在后台自动创建依赖

安装devtools

方便调试 vue项目

注意:有些高版本的 devtools 在vue2里面用不了,需要选择合适的版本

启动项目

npm run serve

修改端口

默认启动端口是8080,自定义修改

配置网址

Configuration | webpackwebpack is a module bundler. Its main purpose is to bundle JavaScript files for usage in a browser, yet it is also capable of transforming, bundling, or packaging just about any resource or asset.icon-default.png?t=O83Ahttps://webpack.js.org/configuration/

添加代理

解决跨域问题,添加代理

2.项目结构

解释:

  • assets:静态资源

  • components:可重用组件

  • router:路由

  • store:数据共享

  • view:视图组件

  • App.vue:最顶层根组件

  • main.js:项目入口

以后还会添加

  • api:跟后台交互,发送 fetch,xhr请求,接收响应

  • plugins:插件

3.入门案例

vue的组件文件以 .vue结尾,每个组件由三部分组成

<template></template><script></script><style></style>

解释:

  • template模板部分,由它生成 html 代码

  • script代码部分,控制模板的数据来源和行为

  • style样式部分,一般不怎么关心

代码示例:  

<template><h1> {{ msg }}</h1>
</template><script>const options = {data: function() {return {msg: 'Hello Vue2'}}}export default options;
</script>

其中 定义和导出 options 对象是约定好的。

整个流程

4.文本插值 {{}}

代码示例

<template><div><h1>{{ name }}</h1><h2>{{ age > 18 ? '成年' : '未成年'}}</h2></div>
</template><script>const options = {data: function() {return {name : "李嘉图",age : 18}}}export default options;
</script>

 5.属性绑定 v-bind

代码示例

<template><div><input type="text" :value="name"><br><input type="text" :value="age"><br><input type="date" :value="brithday"></div>
</template><script>const options = {data: function() {return {name : "李嘉图",brithday : "1999-09-09",age : 18}}}export default options;
</script>

6.事件绑定 v-on

代码示例

<template><div><input type="button" value="点我加一" @click="m1"><input type="button" value="点我减一" @click="m2"></div>
</template><script>const options = {data: function() {return {count : 0}},methods: {m1() {this.count++;console.log(this.count);},m2() {this.count--;console.log(this.count);}}}export default options;
</script>

 7.双向绑定 v-model

一般在表单中使用这种双向绑定

代码示例

<template><div><input type="text" v-model="name"><br><input type="text" v-model="age"></div>
</template><script>const options = {data: function() {return {name: "李嘉图",age: 18}},methods: {}}export default options;
</script>

如果F12看不到 vue devtools,把配置打开

8.计算属性 computed

最重要的不同点,computed有缓存,只需要执行一次代码,而方法调用每调用一次需要执行一遍代码。

9.axios

axios它的底层是用了 XMLHttpRequest(xhr)方式发送请求和接收响应,xhr相对于之前讲过的 fetch api 来说,功能更加强大,但由于是比较老的 api,不支持 promise ,axiosxhr进行了封装,使之支持 promise,并提供了对请求、响应的统一拦截。

安装

npm install axios -S

代码示例

<template><div><input type="button" value="获取远程数据" @click="sendReq()"></div>
</template><script>import axios from 'axios';const options = {data: function() {return {}},methods: {async sendReq() {const resp = await axios.get('/api/student')console.log(resp)}}}export default options;
</script>

axios发送请求

请求备注
axios.get(url[, config])常用
axios.delete(url[, config])
axios.head(url[, config])
axios.options(url[, data[,config]])
axios.post(url[, data[,config]])常用
axios.put(url[, config])
axios.patch(url[, config])

说明

  • config - 选项对象、例如查询参数、请求头...

  • data - 请求体数据、最常见的是 json 格式数据

axios拦截器

自己封装一个自定义的 axios

请求拦截器:在请求发送前,可以在这里添加 token、调整请求配置等。

响应拦截器:对返回数据进行统一处理,针对不同状态码进行错误处理。

封装方法:如 getpost 封装可以简化调用,其他方法可以按需添加。

axiosInstance.js

import axios from 'axios';// 创建 axios 实例
const axiosInstance = axios.create({baseURL: '/api', // 你的基础路径,可以根据需要调整timeout: 5000, // 请求超时时间
});// 请求拦截器
axiosInstance.interceptors.request.use((config) => {// 在发送请求之前做一些处理// 例如:在请求头中添加 tokenconst token = localStorage.getItem('token');if (token) {config.headers['Authorization'] = `Bearer ${token}`;}console.log('请求拦截器配置:', config); // 可用于调试return config;},(error) => {// 处理请求错误console.error('请求错误:', error);return Promise.reject(error);}
);// 响应拦截器
axiosInstance.interceptors.response.use((response) => {// 在接收响应后做一些处理console.log('响应拦截器响应:', response); // 可用于调试return response.data; // 返回实际数据},(error) => {// 处理响应错误if (error.response) {// 根据不同状态码进行处理switch (error.response.status) {case 401:console.error('未授权,请重新登录');// 可以跳转到登录页面break;case 403:console.error('拒绝访问');break;case 404:console.error('请求地址出错');break;case 500:console.error('服务器内部错误');break;default:console.error('其他错误信息');}} else {console.error('网络连接错误或超时');}return Promise.reject(error);}
);// 封装 GET 请求方法
export function get(url, params) {return axiosInstance.get(url, { params });
}// 封装 POST 请求方法
export function post(url, data) {return axiosInstance.post(url, data);
}// 其他请求方法(PUT、DELETE 等)也可以封装
export function put(url, data) {return axiosInstance.put(url, data);
}export function del(url) {return axiosInstance.delete(url);
}// 默认导出 axios 实例
export default axiosInstance;

调用示例

import { get, post } from './axiosInstance';async function fetchData() {try {const response = await get('/student');console.log('数据:', response);} catch (error) {console.error('请求错误:', error);}
}

10.条件渲染 v-if v-else

代码示例

<template><div><input type="button" value="获取远程数据" @click="sendReq()"><h1>学生列表</h1><table><thead><tr><th>编号</th><th>姓名</th><th>年龄</th><th>性别</th></tr></thead><tbody><div v-if="this.students.length > 0">显示学生数据</div><div v-else>不显示学生数据</div></tbody></table></div>
</template><script>import axios from 'axios';const options = {data: function() {return {students: []}},methods: {async sendReq() {const resp = await axios.get('/api/student')console.log(resp.data)this.students = resp.data}}}export default options;
</script><style scoped>table {width: 100%;border-collapse: collapse;}th, td {border: 1px solid #ddd;padding: 8px;}th {background-color: #f2f2f2;text-align: left;}tr:nth-child(even) {background-color: #f9f9f9;}tr:hover {background-color: #f1f1f1;}
</style>

 11.列表渲染 v-for

代码示例

<template><div><h1>学生列表</h1><table><thead><tr><th>编号</th><th>姓名</th><th>年龄</th><th>性别</th></tr></thead><tbody v-if="this.students.length > 0"><tr v-for="student in students" :key="student.id"><td>{{ student.id }}</td><td>{{ student.name }}</td><td>{{ student.age }}</td><td>{{ student.gender }}</td></tr></tbody></table></div>
</template><script>import axios from 'axios';const options = {data: function() {return {students: []}},methods: {async sendReq() {const resp = await axios.get('/api/student')console.log(resp.data)this.students = resp.data}},mounted() {this.sendReq()}}export default options;
</script><style scoped>table {width: 100%;border-collapse: collapse;}th, td {border: 1px solid #ddd;padding: 8px;}th {background-color: #f2f2f2;text-align: left;}tr:nth-child(even) {background-color: #f9f9f9;}tr:hover {background-color: #f1f1f1;}
</style>

12.重用组件

AddButton.vue  

<template><div class="add-button"><button @click="handleAdd">增加</button></div></template><script>export default {name: 'AddButton',methods: {handleAdd() {this.$emit('add');}}}</script><style scoped>.add-button {display: inline-block;margin: 10px;}.add-button button {background-color: #4caf50; /* 绿色 */border: none;color: white;padding: 10px 20px;text-align: center;text-decoration: none;display: inline-block;font-size: 16px;margin: 4px 2px;cursor: pointer;border-radius: 8px;}.add-button button:hover {background-color: #45a049;}</style>

DeleteButton.vue

 

<template><div class="delete-button"><button @click="handleDelete" :disabled="!isEnabled">删除</button></div></template><script>export default {name: 'DeleteButton',props: {isEnabled: {type: Boolean,default: true}},methods: {handleDelete() {this.$emit('delete');}}}</script><style scoped>.delete-button {display: inline-block;margin: 10px;}.delete-button button {background-color: #f44336; /* 红色 */border: none;color: white;padding: 10px 20px;text-align: center;text-decoration: none;display: inline-block;font-size: 16px;margin: 4px 2px;cursor: pointer;border-radius: 8px;}.delete-button button:hover {background-color: #da190b;}.delete-button button:disabled {background-color: #ccc;cursor: not-allowed;}</style>

EditButton.vue  

<template><div class="edit-button"><button @click="handleEdit">修改</button></div></template><script>export default {name: 'EditButton',methods: {handleEdit() {this.$emit('edit');}}}</script><style scoped>.edit-button {display: inline-block;margin: 10px;}.edit-button button {background-color: #2196f3; /* 蓝色 */border: none;color: white;padding: 10px 20px;text-align: center;text-decoration: none;display: inline-block;font-size: 16px;margin: 4px 2px;cursor: pointer;border-radius: 8px;}.edit-button button:hover {background-color: #0b7dda;}</style>

App.vue  

<template><div><add-button @add="handleAdd"></add-button><delete-button @delete="handleDelete"></delete-button><edit-button @edit="handleEdit"></edit-button></div>
</template><script>
import AddButton from "./components/AddButton.vue";
import DeleteButton from "./components/DeleteButton.vue";
import EditButton from "./components/EditButton.vue";const options = {components: {AddButton,DeleteButton,EditButton},data: function() {return {}},methods: {handleAdd() {alert('增加操作');},handleDelete() {alert('删除操作');},handleEdit() {alert('修改操作');}},mounted: function() {}}export default options;
</script><style scoped>table {width: 100%;border-collapse: collapse;}th, td {border: 1px solid #ddd;padding: 8px;}th {background-color: #f2f2f2;text-align: left;}tr:nth-child(even) {background-color: #f9f9f9;}tr:hover {background-color: #f1f1f1;}
</style>

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

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

相关文章

RAG如何提升视觉问答?剑桥大学博士论文《使用检索方法增强多模态问答系统》

开发能够处理复杂任务的人工智能系统的需求推动了深度学习的快速发展&#xff0c;尤其是自 2016 年以来&#xff0c;神经网络模型已成为主流方法。这些模型的应用范围广泛&#xff0c;从推荐系统到语音识别&#xff0c;彻底变革了多个领域。然而&#xff0c;仍然存在一些挑战&a…

C++初阶学习第九弹-----vector的模拟实现

C初阶学习第六弹------标准库中的string类_c# string[]-CSDN博客 C初阶学习第七弹——string的模拟实现-CSDN博客 C初阶学习第八弹--深入解析vector的使用-CSDN博客 一.vector的成员变量 目录 一.vector的成员变量 二.vector的模拟实现 2.1vector的构造与析构 2.2迭代器…

提升网站流量的搜索引擎优化实用指南

内容概要 搜索引擎优化&#xff08;SEO&#xff09;是提升网站可见性与流量的重要过程。在当今数字时代&#xff0c;理解这一领域的基本概念至关重要。SEO不仅仅是关于提高关键词排名&#xff0c;更是关于如何创造更好的用户体验和吸引目标受众。以下是一些关键要素&#xff0…

求教0基础入门大模型的学习路线?java出身,数学良好,希望入局大模型算法,有无必要从cnn学起?

目录 前言&#xff1a; Prompt工程&#xff1a; 2.AI编程 3.API调用 4.大模型应用开发 1)RAG 2)Agent 5.深水区&#xff1a;模型训练和微调 1)Fine-tuning 2)多模态 6.产品和交付 前言 本人本科学历java开发出身&#xff0c;数学基础良好&#xff0c;希望入局大模…

ubuntu 安装 mongodb 笔记记录

https://www.mongodb.com/try/download/community 以上是下载地址 查看系统 (base) duyichengduyicheng-computer:~$ cat /proc/version Linux version 6.8.0-48-generic (builddlcy02-amd64-010) (x86_64-linux-gnu-gcc-13 (Ubuntu 13.2.0-23ubuntu4) 13.2.0, GNU ld (GNU …

隐藏式水印了解一下?你以为加水印很麻烦?

隐藏式水印了解一下&#xff1f;你以为加水印很麻烦&#xff1f; 想在网页上添加水印&#xff1f;想要隐形又清晰的水印效果&#xff1f;watermark-js-plus或许就是你正在找的工具&#xff01;本文将详细介绍这款前端水印库的特点和使用方法&#xff0c;帮你轻松搞定网页水印问…

大模型人工智能课程全栈完整学习路径

嘿&#xff0c;朋友们&#xff0c;今天我们聊点高级的——大模型人工智能课程的全栈学习路径。不过别慌&#xff0c;虽然听起来高大上&#xff0c;但咱们慢慢来。从零开始&#xff0c;一步步带你走进这个神奇的世界。喝杯咖啡&#xff0c;穿上最舒适的拖鞋&#xff0c;准备好踏…

学SQL,要安装什么软件?

先上结论&#xff0c;推荐MySQLDbeaver的组合。 学SQL需要安装软件吗&#xff1f; 记得几年前我学习SQL的时候&#xff0c;以为像Java、Python一样需要安装SQL软件包&#xff0c;后来知道并没有所谓SQL软件&#xff0c;因为SQL是一种查询语言&#xff0c;它用来对数据库进行操…

六、鸿蒙开发-导航组件、定时器组件、动画

提示&#xff1a;本文根据b站尚硅谷2024最新鸿蒙开发HarmonyOS4.0鸿蒙NEXT星河版零基础教程课整理 链接指引 > 尚硅谷2024最新鸿蒙开发HarmonyOS4.0鸿蒙NEXT星河版零基础教程 文章目录 一、定时器1.1 参数1.2 事件 二、导航组件2.1 概述2.2 导航栏样式2.2.1 导航栏位置2.2.2…

【含文档】基于ssm+jsp的流浪动物收养系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: apache tomcat 主要技术: Java,Spring,SpringMvc,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定义了两个…

TTL器件和CMOS器件的逻辑电平

一、逻辑电平的一些概念 要了解逻辑电平的内容&#xff0c;首先要知道以下几个概念的含义&#xff1a; 1&#xff1a;输入高电平&#xff08;VIH&#xff09;&#xff1a; 保证逻辑门的输入为高电平时所允许的最小输入高电平&#xff0c;当输入电平高于VIH时&#xff0c;则认…

10. java基础知识(下)

文章目录 一、一带而过二、字符串类型String1. 简单了解2. 关于结束符\03. 自动类型转换与强制类型转换 三、API文档与import导包1. API文档2. import导包 四、java中的数组1. 创建2. 遍历3. 补充4. Arrays类① 简单介绍② 练习 五、方法的重载六、规范约束七、内容出处 一、一…

Ubuntu下的截图工具Flameshot

安装Flameshot截图工具 sudo apt install flameshot配置快捷键Alt A 进入系统设置settings&#xff0c;找到Keyboard下的Keyboard Shortcuts 快捷键设置面板&#xff0c;如下图 添加一个快捷Alt A Add Custom Shortcut设置如上内容 Name设置为&#xff1a; Flameshot Sc…

(60)使用LMS算法和NLMS(归一化LMS)算法进行降噪

文章目录 前言一、关于自适应降噪仿真的几点说明1.降噪2. 参考信号与噪声信号3. LMS算法的步长4.自适应降噪原理5.维纳滤波器系数 二、LMS与NLMS自适应降噪的仿真三、仿真结果 前言 本文介绍了LMS自适应滤波器和NLMS自适应滤波器在降噪方面的应用&#xff0c;阐明期望信号、参…

如何从Python函数中返回列表

在 Python 中&#xff0c;可以轻松地从函数中返回一个列表。可以将列表直接作为返回值&#xff0c;通过 return 语句将其返回。 1、问题背景 在编写一个游戏时&#xff0c;需要创建一个函数来返回一个列表变量&#xff0c;以便将其传递给另一个变量。但是&#xff0c;在运行程…

深 度 学 习

神经网络基础 一、逻辑回归( Logic Regression ) 1 问题的模型 模型&#xff1a; 其中xx为输入量&#xff0c;y^y^​预测量&#xff0c;σ()σ()激活函数。   逻辑回归主要用于二分类问题的拟合&#xff1a;0≤y^P(y1∣x)≤10≤y^​P(y1∣x)≤1&#xff0c;σ(z)σ(z)如图…

GEE 数据集——美国gNATSGO(网格化国家土壤调查地理数据库)完整覆盖了美国所有地区和岛屿领土的最佳可用土壤信息

目录 简介 代码 引用 网址推荐 知识星球 机器学习 gNATSGO&#xff08;网格化国家土壤调查地理数据库&#xff09; 简介 gNATSGO&#xff08;网格化国家土壤调查地理数据库&#xff09;数据库是一个综合数据库&#xff0c;完整覆盖了美国所有地区和岛屿领土的最佳可用土…

(金蝶云星空)客户端追踪SQL

快捷键 ShitfCtryAltM 点击开始、最后操作功能、然后查看报告 SQL报告

小菜家教平台(三):基于SpringBoot+Vue打造一站式学习管理系统

目录 前言 今日进度 详细过程 相关知识点 前言 昨天重构了数据库并实现了登录功能&#xff0c;今天继续进行开发&#xff0c;创作不易&#xff0c;请多多支持~ 今日进度 添加过滤器、实现登出功能、实现用户授权功能校验 详细过程 一、添加过滤器 自定义过滤器作用&…

【数据处理】数据预处理·数据变换(熵与决策树)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;软件开发必备知识_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前…