• Vue快速入门


    目录

    一、概述

    环境准备

    前置知识

    JavaScript-导入导出

    默认导入导出

    二、局部使用Vue

    1、使用步骤

    准备工作

    构建用户界面

    2、常用指令

    v-for

    v-bind

    v-if & v-show

    v-on

    v-model

    3、生命周期

    三、Axios

    使用案例1

    测试

    使用案例2

    测试

    请求方式别名

    举例

    四、综合案例

    分析

    代码编写

    测试


    一、概述

     Vue是一款用于构建用户界面的渐进式JavaScript框架。

    环境准备

    • 开发平台:VsCode
    • 环境配置:node.js

    安装node.js看这里 使用NVM实现多版本Node.js的版本共存和无缝切换_nodejs多版本共存_An1ong的博客-CSDN博客

    前置知识

    JavaScript-导入导出

    JS提供的导入导出机制,可以实现按需导入。

            假设现在有一个外部js文件,里面存放了两个函数,用来打印信息。

            要是使用它就要在html里面引入它,然后调用。此时在这个html案例中它只用了其中一个函数,那么如果此时js文件有100个函数,也就是说此时导入了100个函数而其他99个函数压根就没有使用,这无疑使造成了很大的性能损失。

            为此js提供了按需导入的功能,你使用什么就导入什么。改良后的代码案例如下

     在方法前面加上export关键字,标识可以导出。或者在方法最底部export{ 方法1,方法2 }

    在使用的地方加入import关键字导入

    注意:import关键字一定要写在

  • v-bind

    语法:v-bind :属性名 = " 属性值 "

    简化::属性名 = " 属性值 "

    注:v-bind所绑定的数据,必须在data定义。

    传统的html超链接

    1. <div id="app">
    2. <a href="https://blog.csdn.net/m0_56308072?spm=1000.2115.3001.5343">超链接An1onga>
    3. div>

    在vue中使用v-bind达到同样的效果

    1. "app">
  • v-if & v-show

    同样都是达到条件才会生效,只不过其中元素v-show全部都渲染了,只是将不符合条件的元素隐藏了起来;而不符合条件的,v-if压根就没有渲染出来

    v-on

    作用:为标签绑定事件

    语法:v-on:事件名="函数名"

            可简写为@事件名="函数名" 

     像数据一样,方法也需要统一的放在methods里,固定格式

    1. createApp({
    2. data () {
    3. return {
    4. //定义数据
    5. }
    6. },
    7. methods: {
    8. //定义方法
    9. }
    10. }).mount("#app")

     为两个按钮绑定事件

    1. <body>
    2. <div id="app">
    3. <button v-on:click="money">给你钱button>
    4. <button @click="love">给你爱button>
    5. div>
    6. <script type="module">
    7. import { createApp } from "https://unpkg.com/vue@3/dist/vue.esm-browser.js";
    8. createApp({
    9. data () {
    10. return {
    11. //定义数据
    12. }
    13. },
    14. methods: {
    15. //定义方法
    16. money:function(){
    17. alert("vx转账300块")
    18. },
    19. love:function(){
    20. alert("我爱你❤")
    21. }
    22. }
    23. }).mount("#app")
    24. script>
    25. body>

    v-model

    作用 :在表单元素上使用,双向数据绑定。可以方便的获取或设置表单项数据

    语法:v-model=" 变量名 "

    注:v-model中绑定的变量,必须在data中定义

    案例:

            我们在搜索框中会输入数据,这个数据前端可以接收到并存在变量中,之后又可以使用这个变量进行操作。当内部这个变量发生变化时,又会反过来影响到视图层,这就叫双向绑定。

    1. <body>
    2. <div id="app">
    3. <label for="category">文章分类:label>
    4. <input type="text" id="category" v-model="searchConditions.category" />
    5. <span>{{ searchConditions.category }}span>
    6. <br/>
    7. <label for="status">发布状态:label>
    8. <input type="text" id="status" v-model="searchConditions.state" />
    9. <span>{{ searchConditions.state }}span>
    10. <br/>
    11. <button>搜索button>
    12. <br/>
    13. div>
    14. <script type="module">
    15. import { createApp } from "https://unpkg.com/vue@3/dist/vue.esm-browser.js";
    16. createApp({
    17. //准备数据
    18. data() {
    19. return {
    20. searchConditions:{
    21. category:'',
    22. state:''
    23. }
    24. }).mount("#app");
    25. script>
    26. body>

    3、生命周期

    生命周期有八个阶段,每个阶段会自动执行一个生命周期方法(钩子),让开发者有机会在特定的阶段执行自己的代码

    其中,我们只需要记住mounted方法即可,一般用于在页面加载完毕时,发起异步请求,加载数据,渲染页面

    注:mounted方法不在methods中也不在data中,它与他们是同级的,需要单独声明


    三、Axios

    对原生的Ajax进行了封装,简化书写,快速开发

     

    注:method不要写成methods,vscode在编写代码的时候不会报错,在网页上看可就是一片红了

    使用案例1

    现在已经起了一个后端服务器(自己随便写一个有接口的springboot程序即可)

    测试的接口为 获取文章列表

    1. <body>
    2. <script src="https://unpkg.com/axios/dist/axios.min.js">script>
    3. <script>
    4. // 发送请求
    5. axios({
    6. method:'get',
    7. url:'http://localhost:8888/article/getAll'
    8. }).then(result => {
    9. //成功的回调,result代表服务器响应的所有的数据,包含了响应header、body。
    10. //result.data 代表的是接口响应的核心数据
    11. console.log(result.data);
    12. }).catch(err => {
    13. //失败的回调
    14. console.log(err);
    15. })
    16. script>
    17. body>


     

    测试

     F12打开网页控制台,就能看到我们在前端发起的请求得到了后端的响应并获取了数据

    如果出现这个说明出现了跨域问题,需要在Controller上加上注解@CrossOrigin即可

    详情解决看这篇icon-default.png?t=N7T8https://blog.csdn.net/m0_56308072/article/details/130813590?spm=1001.2014.3001.5501

    使用案例2

    现在测试一个post请求,测试的接口为 新增文章

    1. <script src="https://unpkg.com/axios/dist/axios.min.js">script>
    2. <script>
    3. let article = {
    4. title:'明天会更好',
    5. category:'生活',
    6. time:'2000-01-01',
    7. state:'草稿'
    8. }
    9. axios({
    10. method:'post',
    11. url:'http://localhost:8888/article/add',
    12. data:article
    13. }).then(result => {
    14. console.log(result.data)
    15. }).catch(err => {
    16. })
    17. script>

    测试

    请求方式别名

    为了方便起见。Axios已经为所有支持的请求方法提供了别名(推荐使用这种方式)

    格式:axios.请求参数(url,[,data[,config]])

            url是必带的参数,data与config是可选参数

    举例

    将上面两个改成别名方式请求

    1. axios.get('http://localhost:8888/article/getAll')..then(result => {
    2. //成功的回调,result代表服务器响应的所有的数据,包含了响应header、body。
    3. //result.data 代表的是接口响应的核心数据
    4. console.log(result.data);
    5. }).catch(err => {
    6. //失败的回调
    7. console.log(err);
    8. });

    1. axios.post('http://localhost:8888/article/add',article).then(result => {
    2. console.log(result.data);
    3. }).catch({})

    可以发现,使用这种方式来编写axios异步请求会更简便好用,也更推荐使用这种方式


    四、综合案例

    将本篇博客所学的全部内容综合起来,做一个综合案例作为本篇博客的结尾,案例如下

     

    分析

            首先进入页面,就要在mounted钩子函数里写axios请求以获取所有的文章数据。之后得到数据之后,用v-for将数据以此渲染在表格上。至于上面的搜索栏中要使用v-model双向绑定数据,搜索要用v-on绑定一个点击事件发起条件搜索请求,最终让页面只显示搜索的数据。

            其中有几个注意点:由于我们上面是将axios和vue分开来讲的,在将他们综合到一起的时候必然会出现一些不同的事项。

            html中引入了vue,那么就要将axios放入要执行方法里面,不能像之前一样单独放在外面,其次我们所要使用到一切数据都要先在data里面声明一下,createApp里面使用这些数据的时候要在前面加上this. 因为Vue的数据绑定是基于响应式系统的,通过this关键字,才能够访问组件实例中的数据,确保对数据的修改能够触发视图的更新。

    代码编写

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8" />
    5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    6. <title>Documenttitle>
    7. head>
    8. <body>
    9. <script src="https://unpkg.com/axios/dist/axios.min.js">script>
    10. <div id="app">
    11. 文章分类:<input type="text" v-model="searchList.category">
    12. 发布状态:<input type="text" v-model="searchList.state">
    13. <button @click="search">搜索button>
    14. <table>
    15. <tr>
    16. <td>标题td>
    17. <td>分类td>
    18. <td>时间td>
    19. <td>状态td>
    20. <td>操作td>
    21. tr>
    22. <tr v-for="item in arrayList " :key="item.id">
    23. <td>{{ item.title }}td>
    24. <td>{{ item.category }}td>
    25. <td>{{ item.time }}td>
    26. <td>{{ item.state }}td>
    27. <td>
    28. <button>编辑button>
    29. <button>删除button>
    30. td>
    31. tr>
    32. table>
    33. div>
    34. <script type="module">
    35. import { createApp } from "https://unpkg.com/vue@3/dist/vue.esm-browser.js";
    36. createApp({
    37. data() {
    38. return {
    39. arrayList : [],
    40. searchList:{
    41. category:'',
    42. state:''
    43. }
    44. };
    45. },
    46. methods: {
    47. search:function(){
    48. axios
    49. .get("http://localhost:8888/article/search",{
    50. params: {
    51. category: this.searchList.category,
    52. state: this.searchList.state
    53. }
    54. })
    55. .then(result =>{
    56. console.log(result.data);
    57. this.arrayList = result.data
    58. }).catch(err => {
    59. })
    60. }
    61. },
    62. mounted() {
    63. axios
    64. .get("http://localhost:8888/article/getAll")
    65. .then((result) => {
    66. console.log(result.data);
    67. this.arrayList = result.data;
    68. })
    69. .catch((err) => {});
    70. },
    71. }).mount("#app");
    72. script>
    73. body>
    74. html>

          

    测试

  • 相关阅读:
    文档理解的新时代:LayOutLM模型的全方位解读
    CI/CD
    解决mac系统终端无法使用vpn
    计算机毕业设计(附源码)python在线宠物救助平台
    基于python爬虫与数据分析系统设计
    React Native for Arcgis 地图开发 聚合图Cluster (十一)
    【Java】System
    Apollo学习笔记(28)贝叶斯滤波
    AI原生技术分享活动:引领智能科技新浪潮
    Python--测试代码
  • 原文地址:https://blog.csdn.net/m0_56308072/article/details/134398098