当前位置:   article > 正文

vue详解

vue详解

目录

​编辑

常用指令

v-for

v-bind

v-if & v-show

v-if

v-show

v-on

v-model

Vue生命周期

​编辑 Axios

Axios使用步骤

Axios-请求方式别名

Vue简单案例


常用指令

指令:HTML标签上带有 v-前缀的特殊属性,不同的指令具有不同的含义,可以实现不同的功能

常用指令:
v-for        列表渲染,遍历容器的元素或者对象的属性
v-bind        为HTML标签绑定属性值,如设置 href,css样式等
v-if/y-else-if/v-else        条件性的渲染某元素,判定为true时渲染,否则不渲染
v-show        根据条件展示某元素,区别在于切换的是display属性的值
v-model        在表单元素上创建双向数据绑定
V-on        为HTML标签绑定事件

v-for

作用:列表渲染,遍历容器的元素或者对象的属性

语法:v-for="(item,index)in items

items 为遍历的数组
item 为遍历出来的元素
index 为索引/下标,从0开始 ;可以省略,省略index语法:v-for ="item in items

  1. <!DOCTYPE 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>Document</title>
  7. </head>
  8. <body>
  9. <div id="app">
  10. <table border="1 solid" colspa="0" cellspacing="0">
  11. <tr>
  12. <th>文章标题</th>
  13. <th>分类</th>
  14. <th>发表时间</th>
  15. <th>状态</th>
  16. <th>操作</th>
  17. </tr>
  18. <!-- 哪个无素要出现多次,v-for指令就添加到哪个元素上 -->
  19. <tr v-for="(article,index) in articleList">
  20. <td>{{article.title}}</td>
  21. <td>{{article.category}}</td>
  22. <td>{{article.time}}</td>
  23. <td>{{article.state}}</td>
  24. <td>
  25. <button>编辑</button>
  26. <button>删除</button>
  27. </td>
  28. </tr>
  29. <!-- <tr>
  30. <td>标题2</td>
  31. <td>分类2</td>
  32. <td>2000-01-01</td>
  33. <td>已发布</td>
  34. <td>
  35. <button>编辑</button>
  36. <button>删除</button>
  37. </td>
  38. </tr>
  39. <tr>
  40. <td>标题3</td>
  41. <td>分类3</td>
  42. <td>2000-01-01</td>
  43. <td>已发布</td>
  44. <td>
  45. <button>编辑</button>
  46. <button>删除</button>
  47. </td>
  48. </tr> -->
  49. </table>
  50. </div>
  51. <script type="module">
  52. //导入vue模块
  53. import { createApp} from
  54. 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
  55. //创建应用实例
  56. createApp({
  57. data() {
  58. return {
  59. //定义数据
  60. articleList:[{
  61. title:"医疗反腐绝非砍医护收入",
  62. category:"时事",
  63. time:"2023-09-5",
  64. state:"已发布"
  65. },
  66. {
  67. title:"中国男篮缘何一败涂地?",
  68. category:"篮球",
  69. time:"2023-09-5",
  70. state:"草稿"
  71. },
  72. {
  73. title:"华山景区已受大风影响阵风达7-8级,未来24小时将持续",
  74. category:"旅游",
  75. time:"2023-09-5",
  76. state:"已发布"
  77. }]
  78. }
  79. }
  80. }).mount("#app")//控制页面元素
  81. </script>
  82. </body>
  83. </html>

遍历的数组,必须在data中定义; 要想让哪个标签循环展示多次,就在哪个标签上使用 v-for 指令。 

v-bind

作用:动态为HTML标签绑定属性值,如设置href,src,style样式等,

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

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

v-bind所绑定的数据,必须在data中定义

  1. <!DOCTYPE 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>Document</title>
  7. </head>
  8. <body>
  9. <div id="app">
  10. <a v-bind:href="URL">百度官网</a>
  11. </div>
  12. <script type="module">
  13. //引入vue模块
  14. import { createApp} from
  15. 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
  16. //创建vue应用实例
  17. createApp({
  18. data() {
  19. return {
  20. URL: 'https://www.baidu.com'
  21. }
  22. }
  23. }).mount("#app")//控制html元素
  24. </script>
  25. </body>
  26. </html>

v-bind也可以省略

  1. <!DOCTYPE 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>Document</title>
  7. </head>
  8. <body>
  9. <div id="app">
  10. <!-- <a v-bind:href="URL">百度官网</a> -->
  11. <a :href="URL">百度官网</a>
  12. </div>
  13. <script type="module">
  14. //引入vue模块
  15. import { createApp} from
  16. 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
  17. //创建vue应用实例
  18. createApp({
  19. data() {
  20. return {
  21. URL: 'https://www.baidu.com'
  22. }
  23. }
  24. }).mount("#app")//控制html元素
  25. </script>
  26. </body>
  27. </html>

v-if & v-show

作用:这两类指令,都是用来控制元素的显示与隐藏的

v-if

语法:v-if="表达式",表达式值为 true,显示;false,隐藏

可以配合 v-else-if / v-else 进行链式调用条件判断

原理:基于条件判断,来控制创建或移除元素节点(条件渲染)

适用场景:要么显示,要么不显示,不频繁切换的场景

  1. <!DOCTYPE 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>Document</title>
  7. </head>
  8. <body>
  9. <div id="app">
  10. 手链价格为: <span v-show="customer.level>=0 && customer.level<=1">9.9</span>
  11. <span v-show="customer.level>=2 && customer.level<=4">19.9</span>
  12. <span v-show="customer.level>=5">29.9</span>
  13. </div>
  14. <script type="module">
  15. //导入vue模块
  16. import { createApp} from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
  17. //创建vue应用实例
  18. createApp({
  19. data() {
  20. return {
  21. customer:{
  22. name:'zhangsan',
  23. level:5
  24. }
  25. }
  26. }
  27. }).mount("#app")//控制html元素
  28. </script>
  29. </body>
  30. </html>

v-show

语法:v-show="表达式",表达式值为 true,显示;false,隐藏

原理:基于CSS样式display来控制显示与隐藏

适用场景:频繁切换显示隐藏的场景

  1. <!DOCTYPE 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>Document</title>
  7. </head>
  8. <body>
  9. <div id="app">
  10. 手链价格为: <span v-if="customer.level>=0 && customer.level<=1">9.9</span>
  11. <span v-else-if="customer.level>=2 && customer.level<=4">19.9</span>
  12. <span v-else>29.9</span>
  13. </div>
  14. <script type="module">
  15. //导入vue模块
  16. import { createApp} from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
  17. //创建vue应用实例
  18. createApp({
  19. data() {
  20. return {
  21. customer:{
  22. name:'zhangsan',
  23. level:5
  24. }
  25. }
  26. }
  27. }).mount("#app")//控制html元素
  28. </script>
  29. </body>
  30. </html>

v-on

作用:为html标签绑定事件

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

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

  1. <!DOCTYPE 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>Document</title>
  7. </head>
  8. <body>
  9. <div id="app">
  10. <button v-on:click="money">点我有惊喜</button> &nbsp;
  11. <button @click="kiss">再点更惊喜</button>
  12. </div>
  13. <script type="module">
  14. //导入vue模块
  15. import { createApp} from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
  16. //创建vue应用实例
  17. createApp({
  18. data() {
  19. return {
  20. //定义数据
  21. }
  22. },
  23. methods: {
  24. money:function(){
  25. alert('送你100块钱')
  26. },
  27. kiss:function(){
  28. alert('送你一个飞吻')
  29. }
  30. },
  31. }).mount("#app");//控制html元素
  32. </script>
  33. </body>
  34. </html>

v-model

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

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

  1. <!DOCTYPE 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>Document</title>
  7. </head>
  8. <body>
  9. <div id="app">
  10. 文章分类: <input type="text" v-model="searchConditions.category"/>
  11. 发布状态: <input type="text" v-model="searchConditions.state"/>
  12. <button>搜索</button>
  13. <br />
  14. <br />
  15. <table border="1 solid" colspa="0" cellspacing="0">
  16. <tr>
  17. <th>文章标题</th>
  18. <th>分类</th>
  19. <th>发表时间</th>
  20. <th>状态</th>
  21. <th>操作</th>
  22. </tr>
  23. <tr v-for="(article,index) in articleList">
  24. <td>{{article.title}}</td>
  25. <td>{{article.category}}</td>
  26. <td>{{article.time}}</td>
  27. <td>{{article.state}}</td>
  28. <td>
  29. <button>编辑</button>
  30. <button>删除</button>
  31. </td>
  32. </tr>
  33. </table>
  34. </div>
  35. <script type="module">
  36. //导入vue模块
  37. import { createApp } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
  38. //创建vue应用实例
  39. createApp({
  40. data() {
  41. return {
  42. //定义数据
  43. searchConditions:{
  44. category:'',
  45. state:''
  46. },
  47. articleList: [{
  48. title: "医疗反腐绝非砍医护收入",
  49. category: "时事",
  50. time: "2023-09-5",
  51. state: "已发布"
  52. },
  53. {
  54. title: "中国男篮缘何一败涂地?",
  55. category: "篮球",
  56. time: "2023-09-5",
  57. state: "草稿"
  58. },
  59. {
  60. title: "华山景区已受大风影响阵风达7-8级,未来24小时将持续",
  61. category: "旅游",
  62. time: "2023-09-5",
  63. state: "已发布"
  64. }]
  65. }
  66. }
  67. }).mount("#app")//控制html元素
  68. </script>
  69. </body>
  70. </html>

Vue生命周期

生命周期:指一个对象从创建到销毁的整个过程。

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

Vue生命周期典型的应用场景:在页面加载完毕时,发起异步请求,加载数据,渲染页面。

beforeCreate        创建前
created        创建后
beforeMountK        载入前
mounted        挂载完成
beforeUpdate        数据更新前
updated        数据更新后
beforeUnmount        组件销毁前
unmounted        组件销毁后

 

 Axios

介绍:Axios 对原生的Ajax进行了封装,简化书写,快速开发。

官网:https://www.axios-http.cn/

Axios使用步骤

引入Axios的js文件(参照官网)

使用Axios发送请求,并获取相应结果

  1. <!DOCTYPE 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>Document</title>
  7. </head>
  8. <body>
  9. <!-- 引入axios的js文件 -->
  10. <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  11. <script>
  12. /* 发送请求 */
  13. axios({
  14. method:'get',
  15. url:'http://localhost:8080/article/getAll'
  16. }).then(result=>{
  17. //成功的回调
  18. //result代表服务器响应的所有的数据,包含了响应头,响应体 result.data 代表的是接口响应的核心数据
  19. console.log(result.data);
  20. }).catch(err=>{
  21. //失败的回调
  22. console.log(err);
  23. });
  24. </script>
  25. </body>
  26. </html>

 

  

Axios-请求方式别名

为了方便起见,Axios已经为所有支持的请求方法提供了别名

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

get请求:

 post请求:

 

Vue简单案例

 后端代码:

pom.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>3.1.4</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.itheima</groupId>
  12. <artifactId>axios_demo</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>axios_demo</name>
  15. <description>axios_demo</description>
  16. <properties>
  17. <java.version>17</java.version>
  18. </properties>
  19. <dependencies>
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-starter-web</artifactId>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-starter-test</artifactId>
  27. <scope>test</scope>
  28. </dependency>
  29. <dependency>
  30. <groupId>org.projectlombok</groupId>
  31. <artifactId>lombok</artifactId>
  32. </dependency>
  33. </dependencies>
  34. <build>
  35. <plugins>
  36. <plugin>
  37. <groupId>org.springframework.boot</groupId>
  38. <artifactId>spring-boot-maven-plugin</artifactId>
  39. </plugin>
  40. </plugins>
  41. </build>
  42. </project>

controller层

  1. package com.yjj.controller;
  2. import com.yjj.pojo.Article;
  3. import jakarta.servlet.http.HttpServletResponse;
  4. import org.springframework.web.bind.annotation.*;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. import java.util.stream.Collectors;
  8. @RestController
  9. @RequestMapping("/article")
  10. @CrossOrigin//支持跨域
  11. public class ArticleController {
  12. private List<Article> articleList = new ArrayList<>();
  13. {
  14. articleList.add(new Article("医疗反腐绝非砍医护收入", "时事", "2023-09-5", "已发布"));
  15. articleList.add(new Article("中国男篮缘何一败涂地", "篮球", "2023-09-5", "草稿"));
  16. articleList.add(new Article("华山景区已受大风影响阵风达7-8级", "旅游", "2023-09-5", "已发布"));
  17. }
  18. //新增文章
  19. @PostMapping("/add")
  20. public String add(@RequestBody Article article) {
  21. articleList.add(article);
  22. return "新增成功";
  23. }
  24. //获取所有文章信息
  25. @GetMapping("/getAll")
  26. public List<Article> getAll(HttpServletResponse response) {
  27. return articleList;
  28. }
  29. //根据文章分类和发布状态搜索
  30. @GetMapping("/search")
  31. public List<Article> search(String category, String state) {
  32. return articleList.stream().filter(a -> a.getCategory().equals(category) && a.getState().equals(state)).collect(Collectors.toList());
  33. }
  34. }

 pojo类:

  1. package com.yjj.pojo;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. @Data
  6. @NoArgsConstructor
  7. @AllArgsConstructor
  8. public class Article {
  9. private String title;
  10. private String category;
  11. private String time;
  12. private String state;
  13. }

前端代码

  1. <!DOCTYPE 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>Document</title>
  7. </head>
  8. <body>
  9. <div id="app">
  10. 文章分类: <input type="text" v-model="searchConditions.category">
  11. 发布状态: <input type="text" v-model="searchConditions.state">
  12. <button v-on:click="search">搜索</button>
  13. <br />
  14. <br />
  15. <table border="1 solid" colspa="0" cellspacing="0">
  16. <tr>
  17. <th>文章标题</th>
  18. <th>分类</th>
  19. <th>发表时间</th>
  20. <th>状态</th>
  21. <th>操作</th>
  22. </tr>
  23. <tr v-for="(article,index) in articleList">
  24. <td>{{article.title}}</td>
  25. <td>{{article.category}}</td>
  26. <td>{{article.time}}</td>
  27. <td>{{article.state}}</td>
  28. <td>
  29. <button>编辑</button>
  30. <button>删除</button>
  31. </td>
  32. </tr>
  33. <!-- <tr>
  34. <td>标题2</td>
  35. <td>分类2</td>
  36. <td>2000-01-01</td>
  37. <td>已发布</td>
  38. <td>
  39. <button>编辑</button>
  40. <button>删除</button>
  41. </td>
  42. </tr>
  43. <tr>
  44. <td>标题3</td>
  45. <td>分类3</td>
  46. <td>2000-01-01</td>
  47. <td>已发布</td>
  48. <td>
  49. <button>编辑</button>
  50. <button>删除</button>
  51. </td>
  52. </tr> -->
  53. </table>
  54. </div>
  55. <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  56. <script type="module">
  57. //导入vue模块
  58. import {createApp} from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js';
  59. //创建vue应用实例
  60. createApp({
  61. data(){
  62. return{
  63. articleList:[],
  64. searchConditions:{
  65. category:'',
  66. state:''
  67. }
  68. }
  69. },
  70. methods: {
  71. //声明方法
  72. search:function(){
  73. //发送请求
  74. axios.get('http://localhost:8080/article/search?category='+this.searchConditions.category+'&state='+this.searchConditions.state)
  75. .then(result=>{
  76. //成功回调 result.data
  77. //把得到的数据赋值给articleList
  78. this.articleList=result.data;
  79. }).catch(err=>{
  80. //失败回调
  81. console.log(err);
  82. });
  83. }
  84. },
  85. //钩子函数mounted中,获取所有文章数据
  86. mounted:function(){
  87. //发送异步请求 axios
  88. axios.get('http://localhost:8080/article/getAll').then(result=>{
  89. //成功回调
  90. //console.log(result.data);
  91. this.articleList=result.data;
  92. }).catch(err=>{
  93. //失败回调
  94. console.log(err);
  95. });
  96. }
  97. }).mount('#app');//控制html元素
  98. </script>
  99. </body>
  100. </html>


这一期就到这里啦

努力遇见更好的自己!!!

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/814726
推荐阅读
相关标签
  

闽ICP备14008679号