笔记:SpringBoot+Vue全栈开发2

笔记:SpringBoot+Vue全栈开发2

    • 1. MVVM模式
    • 2. Vue组件化开发
    • 3. 第三方组件element-ui的使用
    • 4. axios网络请求
    • 5. 前端路由VueRouter

1. MVVM模式

MVVM是Model-View-ViewModel的缩写,是一种基于前端开发的架构模式,其核心是提供对View和ViewModel的双向数据绑定。
ViewModel负责连接View和Model,保证视图和数据的一致性。
使用的vue版本为vue3,直接导入vue3本地文件路径在html文件中,然后在写入如下代码:

Vue.createApp({data(){return {}},methods: {}}).mount("#app");// 挂载

data下用于写数据变量,methods下写方法,然后把整个vue容器挂载到id值为app的标签上。
渲染数据使用双花括号,即“{{}}”,花括号中可以写变量或者表达式;如果要渲染html标签字符串,使用v-html;设置标签属性值时使用v-bind:属性名,可以简写为“:属性名”;设置标签元素上的事件时使用v-on:时间名,可以简写为“@事件名”;进行条件判断可以考虑使用v-if或v-show,其中使用v-if为false时,在页面上是没有这个标签元素,而v-show为false时,只是设置了这个标签元素的css样式值"display:none",通常频繁变换切换的考虑使用v-show;进行列表渲染时,使用v-if,即v-for=“user in users"或者v-for=”(user,index) in users",后者带有index下表索引,从0开始,通常需要添加key属性,否则存在潜在的bug,下述演示代码中没有使用key属性;v-model是对表单标签元素进行双向数据绑定。

参考代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>vue3</title><script type="text/javascript" src="../vue3.js"></script>
</head>
<body><div id="app"><div>{{text_str}}</div><div>{{html_str}}</div><div v-html="html_str"></div><a v-bind:href="href_str">{{href_text}}</a><!-- {{表达式或者变量}}} --><p>{{v}}</p><button v-on:click="hh_fuc">+1</button><br><!-- 条件判断 --><button @click="flag = !flag">变换</button><p v-if="flag">v-if:哈哈2</p><p v-show="flag">v-show:哈哈2</p><!-- 列表渲染 --><ul><!-- <li v-for="user in users"><span>{{user.username}}</span><span>{{user.age}}</span></li> --><li v-for="(user,i) in users"><span>{{i}}</span><span>{{user.username}}</span><span>{{user.age}}</span></li></ul></div>
</body>
<script type="text/javascript">Vue.createApp({data(){return {text_str:"hello world!",html_str:"<h3>哈哈</h3>",href_str:"https://www.baidu.com",href_text:"百度",v:1,flag:false,users:[{username:"张三",age:23},{username: "李四",age: 29},{username: "王五",age: 32}]}},methods: {hh_fuc: function () {this.v++;}}}).mount("#app");// 挂载
</script>
</html>

在这里插入图片描述

2. Vue组件化开发

需要用到npm命令,当然首先需要安装nodejs。
使用Vue CLI 脚手架进行构建项目,创建项目命令为:

npm install -g @vue/cli
// 安装vue cli脚手架命令
vue create 项目名
// 创建项目命令

请添加图片描述

运行首先来到当前项目目录下,然后使用命令npm run serve
在这里插入图片描述

在这里插入图片描述
vue中规定组件的后缀名为“.vue”,每个“.vue”组件都由3个部分构成,分别为template、script、style。
自定义组件,首先在当前项目的components目录下新建vue文件,文件命名通常首字母大写,然后在这个文件下添加组件的三部分,之后在App.vue这个文件中导入刚才新建的组件,“import 组件 from ‘./components/组件.vue’”,然后在进行注册一下,即可在页面上添加刚才新建的组件了。
在这里插入图片描述
在这里插入图片描述
运行结果:
在这里插入图片描述

3. 第三方组件element-ui的使用

由第三方组件element-ui目前仅支持vue2,vue3仍在开发当中,为此,下述项目为vue2。element-ui官网链接为:element-ui
在这里插入图片描述
需要注意的是vue2中template下只能有一个直接子标签,而vue3没有限制。下载element-ui命令为:

npm install element-ui

直接在当前项目的文件下运行上述命令即可,然后在mian.js文件中导入element-ui组件,并对这个组件进行全局注册。

import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';Vue.use(ElementUI);

之后在一些组件下copy element-ui的组件的源码并进行修改就可以用在自己的项目上了,如下:

<template><el-table:data="tableData"style="width: 100%":row-class-name="tableRowClassName"><el-table-columnprop="date"label="日期"width="180"></el-table-column><el-table-columnprop="name"label="姓名"width="180"></el-table-column><el-table-columnprop="address"label="地址"></el-table-column></el-table>
</template><style>.el-table .warning-row {background: oldlace;}.el-table .success-row {background: #f0f9eb;}
</style><script>export default {methods: {tableRowClassName({row, rowIndex}) {if (rowIndex === 1) {return 'warning-row';} else if (rowIndex === 3) {return 'success-row';}return '';}},data() {return {tableData: [{date: '2016-05-02',name: '王小虎',address: '上海市普陀区金沙江路 1518 弄',}, {date: '2016-05-04',name: '王小虎',address: '上海市普陀区金沙江路 1518 弄'}, {date: '2016-05-01',name: '王小虎',address: '上海市普陀区金沙江路 1518 弄',}, {date: '2016-05-03',name: '王小虎',address: '上海市普陀区金沙江路 1518 弄'}]}}}
</script>

运行结果:
在这里插入图片描述

4. axios网络请求

安装axios,命令为:

npm install axios

在项目中导入

import axios from 'axios'

发起网络请求通常需要涉及到生命周期,在created里边。
这里有一条api接口,如下:
在这里插入图片描述
这个接口的端口号为9998,而我的vue项目的端口号为8080,此时会出现跨域问题,跨域也就是请求协议、ip地址及端口号三者不同导致的。
在这里插入图片描述
在这里插入图片描述
报错信息为:“localhost/:1 Access to XMLHttpRequest at ‘http://localhost:9998/users’ from origin ‘http://localhost:8080’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.”
解决跨域的问题,通常可以从前端和后端两个进行解决,下面采用的是在后端代码添加配置类来解决跨域问题。

package com.liuze.demo.config;import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class CrosConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**") // 允许跨域访问的路径.allowedOrigins("*") // 允许跨域访问的源.allowedMethods("POST","GET","PUT") // 允许的请求方式.maxAge(168000) // 预检间隔时间.allowedHeaders("*") // 允许头部设置.allowCredentials(false); // 是否发送cookie}
}

在这里插入图片描述
另外,也可以在这个控制器类上添加注解“@CrossOrigin”,这样对于整个控制器类下面的接口都是可以生效的。
在这里插入图片描述
在页面上进行显示

created:function(){   axios.get("http://localhost:9998/users").then((res)=>{this.tableData = res.data;})
}

在这里插入图片描述

5. 前端路由VueRouter

通过不同路由,把路径和组件一一映射。
vue-router目前有两个版本,分别为vue-router3.x,vue-router4.x,前者只能和vue2进行结合使用,后者只能和vue3进行结合使用。安装vue-router的命令如下:

npm install vue-router@4

在项目的components组件目录下新建几个组件“.vue”文件,组件文件中写上最简单的结构容易辨别即可。然后在项目的目录下新建router文件夹,在这个目录下新建“index.js”,在这个文件中写路径与组件的映射关系。

import VueRouter from 'vue-router';
import Vue from 'vue';
import Find from '../components/Find.vue'
import Friend from '../components/Friend.vue'
import Music from '../components/Music.vue'Vue.use(VueRouter)
const router = new VueRouter({routes: [{path:"/",redirect:'/find'}, // 重定向{ path: '/find', component: Find },{ path: '/friend', component: Friend },{ path: '/music', component: Music }]
});
// 导出
export default router

然后在“main.js”文件中把这个router路由导入到vue容器中

import Vue from 'vue'
import App from './App.vue'
import router from './router/index.js'Vue.config.productionTip = falsenew Vue({render: h => h(App),router: router
}).$mount('#app')

在“App.vue”主组件上添加“router-link,router-view”标签元素

<template><div id="app"><router-link to="/find">发现</router-link><router-link to="/friend">朋友</router-link><router-link to="/music">音乐</router-link><router-view></router-view></div>
</template>

运行结果如下:
请添加图片描述
动态路由,也就是根据路径中的一些参数不同,从而跳到不同的页面。如在上述“index.js”中给Music添加子组件,如下,

{ path: '/music', component: Music ,children:[{path:':id',component:MusicItem2}]}

对应的Music组件为:

<template><div>音乐<router-link to="/music/1">音乐1</router-link><router-link to="/music/2">音乐2</router-link><router-view></router-view></div>
</template>

组件MusicItem2为:

<template><div>音乐{{$route.params.id}}</div>
</template>

运行结果:
请添加图片描述

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

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

相关文章

【全面介绍下如何使用Zoom视频会议软件!】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

如何使用Python脚本实现SSH登录

调试IDE&#xff1a;PyCharm Python库&#xff1a;Paramiko 首先安装Paramiko包到PyCharm&#xff0c;具体步骤为&#xff1a;在打开的PyCharm工具中&#xff0c;选择顶部菜单栏中“File”下的“Settings”&#xff0c;在设置对话框中&#xff0c;选择“Project”下的“Proje…

线程安全的原因及解决方法

什么是线程安全问题 线程安全问题指的是在多线程编程环境中&#xff0c;由于多个线程共享数据或资源&#xff0c;并且这些线程对共享数据或资源的访问和操作没有正确地同步&#xff0c;导致数据的不一致、脏读、不可重复读、幻读等问题。线程安全问题的出现&#xff0c;通常是…

视频提取字幕怎么弄?5个快速获取视频字幕的方法

在忙碌而又充满活力的生活中&#xff0c;我们常常在通勤路上和午休间隙通过视频来获取信息和放松心情。 但有时候&#xff0c;我们想把视频里那些令人难忘的瞬间或关键信息保存下来&#xff0c;方便以后回顾或者分享。然而&#xff0c;手动摘录不仅费时&#xff0c;还容易漏掉…

【网络安全】实验七(ISA防火墙的规则设置)

一、实验目的 二、配置环境 打开两台虚拟机&#xff0c;并参照下图&#xff0c;搭建网络拓扑环境&#xff0c;要求两台虚拟机的IP地址要按照图中的标识进行设置&#xff0c;并根据搭建完成情况&#xff0c;勾选对应选项。注&#xff1a;此处的学号本人学号的最后两位数字&…

VRay渲染有什么技巧?渲染100邀请码1a12

渲染是视觉行业非常重要的一环&#xff0c;没有渲染就没有效果图&#xff0c;常用的渲染器有Vray&#xff0c;而Vray渲染有很多技巧&#xff0c;可以让渲染更快更省&#xff0c;下面我们总结下。 1、删除无用对象 检查场景&#xff0c;看是否有一些不需要渲染的物体和灯光&am…

时间处理的未来:Java 8全新日期与时间API完全解析

文章目录 一、改进背景二、本地日期时间三、时区日期时间四、格式化 一、改进背景 Java 8针对时间处理进行了全面的改进&#xff0c;重新设计了所有日期时间、日历及时区相关的 API。并把它们都统一放置在 java.time 包和子包下。 Java5的不足之处&#xff1a; 非线程安全&…

十一、作业

1.从大到小输出 写代码将三个整数数按从大到小输出。 void Swap(int* px, int* py) {int tmp *px;*px *py;*py tmp;} int main() {int a 0;int b 0;int c 0;scanf("%d %d %d", &a, &b, &c);int n 0;if (a<b){Swap(&a, &b);}if (a &l…

移动校园(2):express构建服务器,小程序调用接口,展示数据

express做服务器框架&#xff0c;mssql连接数据库&#xff0c;uni-request调用接口 这是文件夹目录 然后是index.js内容 const expressrequire(express) const appexpress() const uniRouterrequire("./uniRouter") const config{user:sa,password:123456,server:l…

基于YOLOv5的人脸目标检测

本文是在之前的基于yolov5的人脸关键点检测项目上扩展来的。因为人脸目标检测的效果将直接影响到人脸关键点检测的效果&#xff0c;因此本文主要讲解利用yolov5训练人脸目标检测(关键点检测可以看我人脸关键点检测文章) 基于yolov5的人脸关键点检测&#xff1a;人脸关键点检测…

批导会计凭证程序报错,通过监控点和消息类来定位触发的位置

ZFIU001 批导会计凭证报错&#xff0c;通过监控点和消息类来定位触发的位置 在使用程序导入会计凭证的时候&#xff0c;发现报错&#xff0c;后面找了很久很久的系统标准程序&#xff0c;打断点才找到这个位置&#xff0c;使用监控点还是可以比较快速找到报错的原因的&#xff…

QWidget窗口抗锯齿圆角的一个实现方案(支持子控件)2

QWidget窗口抗锯齿圆角的一个实现方案&#xff08;支持子控件&#xff09;2 本方案使用了QGraphicsEffect&#xff0c;由于QGraphicsEffect对一些控件会有渲染问题&#xff0c;比如列表、表格等&#xff0c;所以暂时仅作为研究&#xff0c;优先其他方案 在之前的文章中&#…

昇思学习打卡-10-ShuffleNet图像分类

文章目录 网络介绍网络结构部分实现对应网络结构 模型训练shuffleNet的优缺点总结优点不足 网络介绍 ShuffleNet主要应用在移动端&#xff0c;所以模型的设计目标就是利用有限的计算资源来达到最好的模型精度。ShuffleNetV1的设计核心是引入了两种操作&#xff1a;Pointwise G…

国内采用docker部署open-metadata

背景 最近看看开源的元数据管理项目&#xff0c;比较出名点的有open-metadata、datahub、OpenLineage、atlas。 open-metadata有1千多的贡献者&#xff0c;4.8K的stars&#xff0c;社区现在也比较活跃&#xff0c;支持的数据库类型还蛮多&#xff0c;基本市面上常见的都有支持…

【每日一练】python三目运算符的用法

""" 三目运算符与基础运算的对比 """ a 1 b 2#1.基础if运算判断写法&#xff1a; if a > b:print("基础判断输出&#xff1a;a大于b") else:print("基础判断输出&#xff1a; a不大于b")#2.三目运算法判断&#xff1a;…

揭秘IP:从虚拟地址到现实世界的精准定位

1.IP地址介绍 1.内网 IP 地址&#xff08;私有 IP 地址&#xff09; 内网 IP 地址&#xff0c;即私有 IP 地址&#xff0c;是在局域网&#xff08;LAN&#xff09;内部使用的 IP 地址。这些地址不会在公共互联网中路由&#xff0c;因此可以在多个局域网中重复使用。私有 IP 地…

股票Level-2行情是什么,应该怎么使用,从哪里获取数据

行情接入方法 level2行情websocket接入方法-CSDN博客 相比传统的股票行情&#xff0c;Level-2行情为投资者打开了更广阔的视野&#xff0c;不仅限于买一卖一的表面数据&#xff0c;而是深入到市场的核心&#xff0c;提供了十档乃至千档的行情信息&#xff08;沪市十档&#…

STM32第十六课:WiFi模块的配置及应用

文章目录 需求一、WiFi模块概要二、配置流程1.配置通信串口&#xff0c;引脚和中断2.AT指令3.发送逻辑编写 三、需求实现代码总结 需求 完成WiFi模块的配置,使其最终能和服务器相互发送消息。 一、WiFi模块概要 本次使用的WiFi模块为ESP-12F模块&#xff08;安信可&#xf…

【LLM第8篇】Delta Tuning

如何对large-scale PLM进行调整呢&#xff1f; 一个有效的方式是delta tuning&#xff1b;只更新PLM中的一小部分参数&#xff0c;其它参数不动。 把解决任务的能力具象化成delta object这样的参数&#xff0c;只需要几十兆参数存储。 过去模型参数是随机的&#xff0c;现在预…