SpringBootWeb 篇-入门了解 Vue 前端工程的创建与基本使用

🔥博客主页: 【小扳_-CSDN博客】
❤感谢大家点赞👍收藏⭐评论✍

文章目录

        1.0 基于脚手架创建前端工程

        1.1 基于 Vue 开发前端项目的环境要求

        1.2 前端工程创建的方式

        1.2.1 基于命令的方式来创建前端工程

        1.2.2 使用图形化来创建前端工程

        1.3 启动、停止项目

        1.4 前端项目中的重点文件

        2.0 Vue 基本使用方式

        2.1 Vue 组件

        2.2 文本插值

        2.3 属性绑定

        2.4 事件绑定

        2.5 双向绑定

        2.6 条件渲染

        2.7 Axios

        2.7.1 axiox 创建的 API 与配置代理

        2.7.2 使用 axiox.post() 方法来发送请求 

        2.7.3 使用 axios.get() 方法来发送请求

        2.7.4 vue 统一使用方式 - axiox

        2.7.5 完整代码


        1.0 基于脚手架创建前端工程

        基于脚手架可以快速的创建前端工程,让开发者可以更快速地开始实际开发工作。脚手架工具提供了一些预设的配置选项和常用的功能模块,开发人员可以根据项目需求选择适合的模板和插件,并生成一个完整的项目结构。

        除了创建项目,脚手架工具还通常提供了一些命令来帮助开发人员进行开发、构建和部署等操作,例如启动开发服务器、打包代码、进行代码检查等功能,大大提高了开发效率。

        1.1 基于 Vue 开发前端项目的环境要求

        1)node.js:前端项目的运行环境。

        2)npm:JavaScript 的包管理工具。

        3)Vue CLI:基于 Vue 进行快速开发的完整系统,实现交互式的项目脚手架。

使用以下命令来全局安装 Vue CLI:

npm install -g @vue/cli

安装完成后,您可以通过以下命令来验证 Vue CLI 的安装是否成功:

vue --version

运行结果:

C:\Users\86187>vue --version
@vue/cli 5.0.8

        1.2 前端工程创建的方式

        1.2.1 基于命令的方式来创建前端工程

在命令框中输入:

vue create 项目名称

举个例子:

        首先,在没有中文的路径下创建前端工程:

        接着,输入 vue create 项目名称:

        需要注意的是,包名中包含非 URL 友好字符,例如空格、特殊符号等,就会出现错误。npm 的包名必须是 URL 友好的,只能包含小写字母、数字和连接符(-)。如果包名中包含其他字符,就会触发该错误。还要注意的是,最后不需要用 ";" 结尾。

        再接着,选择 Vue2 来创建前端工程项目:

        最后出现以下结果,则说明创建成功了。

        该路径下就会出现前端项目的文件夹。 

        1.2.2 使用图形化来创建前端工程

vue ui

举个例子:

        首先在命令框中输入:vue ui

        接着,就会跳转到以下网页:

        点击 vue-project 下拉框,再点击 Vue 项目管理器:

        再跳转到以下页面:

        点击创建项目:

        选择 Vue2 来创建:

        最后,文件中就会出现 vue-project1 文件夹了。

        1.3 启动、停止项目

        使用 VS code 来启动项目:

        在终端输入:npm run serve,这样前端工程就启动起来了。

        control + 点击左键连接就可以进入前端网页了:

        使用 control + c 来结束前端工程项目:

        1.4 前端项目中的重点文件

        1)node_modules:当前项目依赖的 js 包

        2)assets:静态资源存放目录

        比如说要展示的图片或者视频、音频之类的资源,都可以存放在该目录中。

        3)components:公共组件存放目录

        存放的公共的资源。这个文件夹中存放的是在整个应用中都会用到的通用性组件,比如按钮、输入框、模态框等。这些组件可以被多个页面或模块共享使用,有利于代码的复用和维护。

        4)App.vue:项目的主组件,页面的入口文件

        5)main.js:整个项目的入口文件

        6)package.json:项目的配置信息、依赖包管理

        7)vue.config.js:vue-cli 配置文件

        配置项目中的信息。

        比如说:前端项目启动后,服务端默认为 8080,很容易和后端 tomcat 端口号冲突。如何修改前端服务的端口号?

        这就可以通过 vue.config.js 文件来配置前端端口号:

        记得保存修改之后的信息,关闭前端服务之后,再来重新启动前端服务:

        2.0 Vue 基本使用方式

        2.1 Vue 组件

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

        1)<template>:结构,只有一个元素,由它生成 HTML 代码。

        2)<style>:样式,编写 css ,控制页面展示效果。全局样式:影响所有组件;局部样式:只作用于当前组件。

        3)<script>:逻辑,编写 js 代码,控制模板的数据来源和行为。

举个例子:

        在前端工程中,已经存在 vue 组件,如:App.vue 、HelloWorld.vue 组件文件:

        都是由结构、样式、逻辑三个部分组成。

        2.2 文本插值

        用来绑定 data 方法返回的对象属性,通过 {{}}  来使用。

代码演示:

运行结果:

        页面展示的结果:

        2.3 属性绑定

        为标签的属性绑定 data 方法中返回的属性。

        用法:v-bind:xxx,简写为 :xxx 。

代码演示:

<template><div class="hello">{{name}} {{age}} <br><!-- 具体书写的方式 --><input type="text" v-bind:value="name"> <br><!-- 简写的方式 --><input type="text" :value="age"> <br></div>
</template><script>
export default {name: 'HelloWorld',props: {msg: String},data() {return {name: "小扳手",age: 22,};}}
</script><!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {margin: 40px 0 0;
}
ul {list-style-type: none;padding: 0;
}
li {display: inline-block;margin: 0 10px;
}
a {color: #42b983;
}
</style>

页面的展示结果:

        2.4 事件绑定

        为元素绑定对应的事件。

用法:v-on:xxx,简写为 @xxx 

代码演示:

网页展示的结果:

        2.5 双向绑定

        表单输入项和 data 方法中的属性进行绑定,任意一方改变都会同步给另一方。

用法:v-model

代码演示:

<template><div class="hello">{{name}} {{age}} <br><!-- 具体书写的方式 --><input type="text" v-bind:value="name"> <br><!-- 简写的方式 --><input type="text" :value="age"> <br><!-- 详细的方式 --><input type="button" value="保存1" v-on:click="handleSave" /> <!-- 简写的方式 --><input type="button" value="保存2" @click="handleSave" /> <br><!-- 直接从表单中改变name --><input type="text" v-model="name" /> <br><!-- 在script中改变named值 --><input type="button" value="点击改变name的值" @click="change"/></div>
</template><script>
export default {name: 'HelloWorld',props: {msg: String},data() {return {name: "小扳",age: 22,};},methods: {handleSave(){alert("点击保存");},change(){this.name = "小扳手"}}}
</script><!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {margin: 40px 0 0;
}
ul {list-style-type: none;padding: 0;
}
li {display: inline-block;margin: 0 10px;
}
a {color: #42b983;
}
</style>

        当要从页面表格中改变 name 的值:从表单输入项改变

        从 data 方法中改变:点击 “点击改变name的值”按钮

        2.6 条件渲染

        根据表达式的值来动态渲染页面元素。

用法:v-if、v-else、v-else-if 

代码演示:

<template><div class="hello">{{name}} {{age}} <br><!-- 具体书写的方式 --><input type="text" v-bind:value="name"> <br><!-- 简写的方式 --><input type="text" :value="age"> <br><!-- 详细的方式 --><input type="button" value="保存1" v-on:click="handleSave" /> <!-- 简写的方式 --><input type="button" value="保存2" @click="handleSave" /> <br><!-- 直接从表单中改变name --><input type="text" v-model="name" /> <br><!-- 在script中改变named值 --><input type="button" value="点击改变name的值" @click="change"/><div v-if="sex == 1">男生</div><div v-else-if="sex == 2">女生</div><div v-else>未知</div></div>
</template><script>
export default {name: 'HelloWorld',props: {msg: String},data() {return {name: "小扳",age: 22,sex: 1};},methods: {handleSave(){alert("点击保存");},change(){this.name = "小扳手"}}}
</script><!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {margin: 40px 0 0;
}
ul {list-style-type: none;padding: 0;
}
li {display: inline-block;margin: 0 10px;
}
a {color: #42b983;
}
</style>

页面展示结果:

        2.7 Axios

        Axios 是一个基于 promise 的网络请求库,作用于浏览器和 node.js 中。

需要深入了解可以点击该连接:请求配置 | Axios中文文档 | Axios中文网 (axios-http.cn)

安装命令:

        在终端输入命令进行安装:

npm install axios

        就会出现在 package.json 文件中:

        接着导入 axios 包:

import axiox from 'axios'

        2.7.1 axiox 创建的 API 与配置代理

axiox 的 API 列表常见的请求方式:

        1)axiox.get(url[,config]):url 表示请求路径,config 表示配置对象,可以设置查询参数、请求头信息。

        2)axiox.post(url[,data[,config]]):url 表示请求路径,config 表示配置对象,可以设置查询参数、请求头信息,data 表示请求体数据,最常见的是 JSON 格式数据。

配置代理:

        为了解决跨域问题,可以在 vue.config.js 文件中配置代理。

代码演示:

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({transpileDependencies: true,devServer: {port: 7070,proxy: {'/api' : {target: 'http://localhost:8080',pathRewrite: {'^/api': ''}}}}
})

        配置完代理后,就可以给后端发送请求了。

        2.7.2 使用 axiox.post() 方法来发送请求 

代码演示:

        绑定了一个发送请求的方法,使用 axiox.post() 方法来发送 post 类型的请求给后端,执行成功后,会自动调用 then() 方法。

        点击发送请求:

抓包结果:

        成功获取来后端返回来的数据。

        后端也成功接收到了前端发送过来的请求:

        2.7.3 使用 axios.get() 方法来发送请求

        可以用到的参数有 url 、config 。

代码演示:

sentGet(){axiox.post("/api/admin/employee/login",{username: "admin",password: "123456"}).then(ret => {console.log(ret.data)axiox.get("/api/admin/employee/1",{headers: {token: ret.data.data.token}}).then(ret => {console.log(ret.data)})})}

        绑定发送 get 请求的方法,先获取到 token 字段的值,再将 token 字段的值设置为发送 get 的请求的请求头 token 的字段值。最后请求发送成功之后,获取返回回来的数据。

抓包结果:

        先发送 post 请求获取到令牌:

        再发送 get 请求:

        2.7.4 vue 统一使用方式 - axiox

        只有 url 是必需的。如果没有指定 method ,请求将默认使用 get 方法。

        使用方式:axiox(config) 

        method:指定请求的方法。

        url:指定请求的路径。

        data:post 请求中存放发送请求体的内容。

        params:get 请求中存放参数信息。

        headers:配置请求头中的消息。

代码演示:

        发送一个 post 请求:

      axiox({method: "post",url: '/api/admin/employee/login',data: {username: "admin",password: "123456"}}).then(ret => {alert(ret.data.data.token)})

        发送一个 get 请求:

axiox({method: 'get',url: '/api/admin/employee/1',headers: {token: "eyJhbGciOiJIUzI1NiJ9.eyJlbXBJZCI6MSwiZXhwIjoxNzE4ODY0MjI5fQ.ZMmX2z6VP5WNotBuq0SpG8UwFe0ZCxj0icoVA2T2ltU"},params: {id: 1}}).then(ret => {console.log(ret.data)})

        2.7.5 完整代码

<template><div class="hello">{{name}} {{age}} <br><!-- 具体书写的方式 --><input type="text" v-bind:value="name"> <br><!-- 简写的方式 --><input type="text" :value="age"> <br><!-- 详细的方式 --><input type="button" value="保存1" v-on:click="handleSave" /> <!-- 简写的方式 --><input type="button" value="保存2" @click="handleSave" /> <br><!-- 直接从表单中改变name --><input type="text" v-model="name" /> <br><!-- 在script中改变named值 --><input type="button" value="点击改变name的值" @click="change"/><div v-if="sex == 1">男生</div> <div v-else-if="sex == 2">女生</div> <div v-else>未知</div>  <br><br><input type="button" value="发送post请求" @click="sentPost" /><input type="button" value="发送get请求" @click="sentGet" /><input type="button" value="发送统一方式请求" @click="sent1" /><input type="button" value="发送统一方式请求" @click="sent2" /></div>
</template><script>
import axiox from 'axios'
export default {name: 'HelloWorld',props: {msg: String},data() {return {name: "小扳",age: 22,sex: 1};},methods: {handleSave(){alert("点击保存");},change(){this.name = "小扳手"},sentPost(){axiox.post("/api/admin/employee/login",{username: "admin",password: "123456"}).then(ret => {console.log(ret.data)})},sentGet(){axiox.post("/api/admin/employee/login",{username: "admin",password: "123456"}).then(ret => {console.log(ret.data)axiox.get("/api/admin/employee/1",{headers: {token: ret.data.data.token}}).then(ret => {console.log(ret.data)})})},sent1(){axiox({method: "post",url: '/api/admin/employee/login',data: {username: "admin",password: "123456"}}).then(ret => {alert(ret.data.data.token)})},sent2(){axiox({method: 'get',url: '/api/admin/employee/1',headers: {token: "eyJhbGciOiJIUzI1NiJ9.eyJlbXBJZCI6MSwiZXhwIjoxNzE4ODY0MjI5fQ.ZMmX2z6VP5WNotBuq0SpG8UwFe0ZCxj0icoVA2T2ltU"},params: {id: 1}}).then(ret => {console.log(ret.data)})}}}
</script><!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
h3 {margin: 40px 0 0;
}
ul {list-style-type: none;padding: 0;
}
li {display: inline-block;margin: 0 10px;
}
a {color: #42b983;
}
</style>

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

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

相关文章

如何建立私域流量?私域流量怎么运营,一文读懂

当全网都在讨论私域流量&#xff0c;你是不是也有很多问号呢&#xff1f; 互联网高速发达&#xff0c;消费形式日新月异&#xff0c;跟不上时代就会被时代淘汰&#xff0c;接下来&#xff0c;我们就从3个层面深度讨论下私域流量究竟是什么&#xff1f;为什么要玩转私域流量&am…

【保姆级教程】Linux 基于 Docker 部署 MySQL 和 Nacos 并配置两者连接

一、Linux 部署 Docker 1.1 卸载旧版本&#xff08;如有&#xff09; sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine1.2 安装 yum-utils 包 sudo yum install -y…

微信多开器

由于微信的限制&#xff0c;我们平时只能登录一个微信&#xff0c;要登录多个微信一般需要多台手机&#xff0c;很显然这种方法很费手机&#xff01;&#xff01;一个微信多开神器可以给你省下好几台手机钱&#xff0c;抓紧拉下来放手机里落灰http://www.xbydon.online/?p132 …

NetSuite 审批工作流与事务处理类型的限制关系

在最近的实践中&#xff0c;用户提出可否对Credit Memo与Vendor Prepayment Application两种事务处理类型进行审批参与&#xff0c;当提出来的时候我们并没有直接在系统中进行测试&#xff0c;而是以常规事务处理的角度认为可以满足客户的需求&#xff1b; 但在沙盒环境中讨论…

RocketMQ快速入门:如何保证消息不丢失|保证消息可靠性(九)

0. 引言 在金融、电商等对数据完整性要求极高的行业&#xff0c;消息的丢失可能会导致数据不一致&#xff0c;严重影响业务逻辑和数据统计&#xff0c;也影响客户体验&#xff0c;所以在很多业务场景下&#xff0c;我们都要求数据不能丢失。而rocketmq中&#xff0c;如何对消息…

当游戏遭遇安全问题,我们应该怎么做?

在游戏安全领域&#xff0c;专业性最差、但最常见的案例类型是DDoS攻击&#xff08;分布式拒绝服务攻击&#xff09;。出于它的特性&#xff0c;中小厂商、独立开发者较容易遭受这类攻击。 例如&#xff0c;今年2月29日上线的手游《雷索纳斯》就遭受了名为ACCN组织发起的DDoS攻…

【内含优惠码】重磅发售!《2023年度中国量化投资白皮书》(纸质版)

这是可以公开了解量化行业图景的&#xff0c;为数不多资料。 简介 《2023年度中国量化投资白皮书》由宽邦科技、华泰证券、金融阶、华锐技术、AMD、阿里云、英迈中国等多家机构联合发起编写&#xff0c;并于2024年6月15日正式发布&#xff0c;全书公17万字6大章节勾勒最新量化…

Studying-代码随想录训练营day15| 222.完全二叉树的节点个数、110.平衡二叉树、257.二叉树的所有路径、404.左叶子之和

第十五天&#xff0c;二叉树part03&#x1f4aa;&#xff0c;编程语言&#xff1a;C 目录 257.完全二叉树的节点个数 110.平衡二叉树 257.二叉树的所有路径 404.左叶子之和 总结 257.完全二叉树的节点个数 文档讲解&#xff1a;代码随想录完全二叉树的节点个数 视频讲解…

Arduino平台软硬件原理及使用——无源蜂鸣器模块的使用

文章目录 一、蜂鸣器发声原理 二、无源蜂鸣器与有源蜂鸣器的区分 三、无源蜂鸣器模块在Arduino中的使用 一、蜂鸣器发声原理 上图为常见的不同封装及规格的蜂鸣器。 同蜜蜂、知了等昆虫发声原理一样&#xff0c;蜂鸣器同样靠振动来发出声音&#xff1b; 如上图为无源蜂鸣器的内…

【总结】ui自动化selenium知识点总结

1. 大致原理 首页安装第三方库selenium库&#xff0c; 其次要下载好浏览器驱动文件&#xff0c;比如谷歌的 chromedriver.exe&#xff0c;配置上环境变量。 使用selenium的webdriver类去创建一个浏览器驱动对象赋值叫driver&#xff0c;一个浏览器驱动对象就可以 实现 对浏…

【vue3|第11期】Vue3中的ref属性:让元素引用变得简单

日期&#xff1a;2024年6月19日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xf…

招聘主播?小心是大陷阱!!!

高薪招聘主播的骗局通常涉及一系列精心设计的步骤&#xff0c;旨在引诱求职者上钩并从中获利。以下是这种骗局常见的几个关键环节&#xff1a; 首先&#xff0c;骗子会通过各种渠道发布诱人的招聘信息&#xff0c;声称正在寻找有潜力的主播&#xff0c;并承诺提供高额的底薪和…

虚拟3D沉浸式展会编辑平台降低了线上办展的门槛

在数字化浪潮的引领下&#xff0c;VR虚拟网上展会正逐渐成为企业展示品牌实力、吸引潜在客户的首选平台。我们与广交会携手走过三年多的时光&#xff0c;凭借优质的服务和丰富的经验&#xff0c;赢得了客户的广泛赞誉。 面对传统展会活动繁多、企业运营繁忙的挑战&#xff0c;许…

【绝对有用】刚刚开通的GPT-4o计算这种数学题目出现问题了

欢迎关注如何解决以上问题的方法&#xff1a;查看个人简介中的链接的具体解决方案

[Qt的学习日常]--窗口

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、窗口的分…

全面了解虚拟线上会议室的核心功能和优势,助力企业高效协作

在现代办公环境中&#xff0c;虚拟线上会议室日益普及&#xff0c;成为企业沟通协作的重要工具。虚拟会议室的出现不仅简化了传统会议的复杂流程&#xff0c;还提供了一系列优势功能&#xff0c;提升了用户的会议体验。 一、虚拟线上会议室的优势功能 1、实时音视频会议 虚拟线…

全网最易懂,开源时序数据库influxDB,实际应用评测

前言&#xff1a; 当今是信息爆炸的时代&#xff0c;在处理高频数据时&#xff0c;关系型数据库oracle/mysql明显表现出乏力&#xff0c;因秒级、毫秒级高频数据&#xff0c;分分钟可以把关系型数据库的表塞爆。在日常生活工作中&#xff0c;我们经常会遇到哪些需要高频分析的场…

[自动驾驶 SoC]-3 英伟达Orin

NVIDIA Jetson AGX OrinTM series (资料来源&#xff1a;nvidia-jetson-agx-orin-technical-brief.pdf) 1 整体介绍 1) Orin SoC结构 Orin SoC&#xff0c;如下图所示&#xff0c;由一个NVIDIA Ampere architecture GPU, Arm Cortex-A78AE CPU, 下一代深度学习核视觉处理加速…

企业防盗版,如何保障上网安全

信息化的发展企业日常办公越来越依赖互联网。然而&#xff0c;终端及普通PC在访问互联网过程中&#xff0c;会面临各种不容忽视的风险。这些风险包括&#xff1a; 员工主动故意的数据泄漏&#xff1a;员工可能故意泄露敏感信息。后台应用程序外发信息&#xff1a;一些应用程序…

代码覆盖率:衡量测试的有效性

在软件开发领域&#xff0c;确保代码的可靠性和稳健性至关重要。实现这一目标的关键实践之一是通过测试。但是&#xff0c;测试本身需要进行测量和评估&#xff0c;以确保其有效性。这就是代码覆盖率发挥作用的地方。代码覆盖率是一种指标&#xff0c;它量化了测试期间程序源代…