笔记:SpringBoot+Vue全栈开发2

news2024/11/19 14:43:59

笔记: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-column
      prop="date"
      label="日期"
      width="180">
    </el-table-column>
    <el-table-column
      prop="name"
      label="姓名"
      width="180">
    </el-table-column>
    <el-table-column
      prop="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 {

    @Override
    public 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 = false

new 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.coloradmin.cn/o/1899874.html

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

相关文章

Shopee(虾皮)怎么获取流量?

店铺流量的高低会直接关联到卖家店铺单量&#xff0c;也关系到一个店铺的营业情况和利润&#xff0c;那么Shopee的流量从哪里来呢&#xff1f; Shopee的平台流量可分为五个部分&#xff1a; 1.自然流量 2.关键字广告流量 3.平台活动流量 4.营销流量 5.粉丝流量 怎么提升…

Vue + SpringBoot:el-upload组件单文件、多文件上传实战解析

文章目录 单文件上传后端前端 多文件上传后端前端 单文件上传 后端 PostMapping("/uploadDxfFile") public R uploadDxfFile(RequestParam(value "file", required true) MultipartFile multipartFile) throws Exception {// 文件校验工作if (multipar…

类和对象深入理解

目录 static成员概念静态成员变量面试题补充代码1代码2代码3如何访问private中的成员变量 静态成员函数静态成员函数没有this指针 特性 友元友元函数友元类 内部类特性1特性2 匿名对象拷贝对象时的一些编译器优化 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接…

Qtgui编程基础

Qt简介 ( 框架5.9.8版本 ) Qt是源代码级的跨平台一次编写到处编译.一次开发的Qt应用程序可以移值到不同平台. Qt体系架构 Qt的整个设计都是以单根继承为主这跟java相同.所谓单根继承就是说所有的Qt类都有一个共同的祖先都是QObject类QObject类后面有三个大的子类分别负责不同…

厌倦了Nvim、vim等命令行编辑器?来看看新血脉....

是否厌倦了那几款烂大街的命令行风格编辑器&#xff1f;今天就来给各位换换血&#xff0c;介绍几个新成员。 让我们深入了解这些文本编辑器的主要功能和优点&#xff1a; 1. Ox Editor&#xff1a;优雅的新秀 Ox Editor是一款新兴的终端文本编辑器&#xff0c;以其简洁和优雅…

汽车IVI中控开发入门及进阶(三十三):i.MX linux开发之开发板

前言: 大部分物料/芯片,不管MCU 还是SoC,都会有原厂提供配套开发板,有这样一个使用原型,在遇到问题时或者进行开发时可以使用。 i.MX 8QuadXPlus MEK board: 1、要测试display显示器,可使用i.MX mini SAS将“LVDS1_CH0”端口连接到LVDS到HDMI适配器的cable。 2、要测试…

接口参数化--代码支撑参数

如果测试的用例里传动态参数&#xff0c;就需要把列出规则&#xff0c;然后在代码里运用前期是把动态参数都列出了&#xff0c;现在需要运用 步骤&#xff1a; 先excel表中定义规范&#xff0c;将请求参数里的时间戳定义规则&#xff08;规范也需要提前写出&#xff09; 建立…

库表设计(基础)-实体与设计关系

实体关系分析 1 实体关系是指系统事务之间的联系。 2 实体关系需要双向分析。 3 实体关系决定表关系。 实体关系的种类 1 一对一 2 一对多 3 多对多 举例&#xff1a; 上面关系如下&#xff1a; 班级和学生 &#xff1a; 1:N 学生和课程&#xff1a;N : N 学生和学籍档案&a…

【MotionCap】pycharm 远程在wsl2 ubuntu20.04中root的miniconda3环境

pycharm wsl2 链接到pycharmsbin 都能看到内容,/root 下内容赋予了zhangbin 所有,pycharm还是看不到/root 下内容。sudo 安装了miniconda3 引发了这些问题 由于是在 root 用户安装的miniconda3 所以安装路径在/root/miniconda3 里 这导致了环境也是root用户的,会触发告警 WA…

温州网站建设方案及报价

随着互联网的发展&#xff0c;网站建设已经成为企业推广和营销的重要手段。温州作为中国经济发达地区之一&#xff0c;各行各业企业纷纷意识到网站建设的重要性&#xff0c;纷纷加大网站建设工作的投入。那么&#xff0c;温州网站建设方案及报价是怎样的呢&#xff1f;下面我们…

昇思25天学习打卡营第10天|ResNet50迁移学习

文章目录 昇思MindSpore应用实践基于MindSpore的ResNet50迁移学习1、迁移学习简介2、加载ImageNet数据集数据集可视化 3、ResNet50 模型4、模型训练固定特征进行训练 5、模型推理 Reference 昇思MindSpore应用实践 本系列文章主要用于记录昇思25天学习打卡营的学习心得。 基于…

AI革命:RAG技术引领未来智能

AI革命:RAG技术引领未来智能 在人工智能的浪潮中,一种名为RAG(Retrieval-Augmented Generation)的技术正在悄然改变我们的世界。这种技术通过整合外部知识库,极大地增强了大型语言模型(LLM)的性能,为智能助手、聊天机器人等应用带来了革命性的提升。 1 突破性的RAG技…

迈威通信本安Wi-Fi 6工业无线AP系列,促进井下无线全覆盖

在现代化的工业生产中&#xff0c;无线通信技术的应用日益广泛。特别是对于矿井等复杂环境&#xff0c;传统的有线通信方式往往面临着布线困难、维护成本高、灵活性差等问题。为了解决这些难题&#xff0c;迈威通信推出了本安Wi-Fi 6工业无线AP系列&#xff0c;以其卓越的性能和…

《C++20设计模式》外观模式

文章目录 一、前言二、实现1、UML类图2、实现 一、前言 一句话总结外观模式&#xff1a;简化接口&#xff0c;或者简化流程。&#x1f642; 相关代码可以在这里&#xff0c;如有帮助给个star&#xff01;AidenYuanDev/design_patterns_in_modern_Cpp_20 二、实现 原来需要很…

idea MarketPlace插件找不到

一、背景 好久没用idea了&#xff0c;打开项目后没有lombok&#xff0c;安装lombok插件时发现idea MarketPlace插件市场找不到&#xff0c;需要重新配置代理源&#xff0c;在外网访问时通过代理服务进行连接 二、操作 ### File-->setting 快捷键 Ctrl Alt S 远端源地…

怎么做外贸推广:10个详细教程和工具

1. 介绍 1.1 什么是外贸推广 外贸推广指的是将产品或服务推广到国际市场的过程。它的主要目的是吸引海外客户&#xff0c;增加销售额&#xff0c;并扩大企业的全球影响力。外贸推广不仅仅是销售产品&#xff0c;它还包括品牌建设、市场研究和客户关系管理。 谷歌外贸推广案例…

实战干货,企业在数字化转型中如何通过最佳实践落地BI报表?

引言&#xff1a;上一篇文章我们提到&#xff1a;通过9大步骤&#xff0c;帮助企业在数字化转型中搭建数据分析的报表体系&#xff01;在实际中的落地过程&#xff0c;通过实施服务的哪些最佳实践可以确保落地效果&#xff0c;达到项目预期目标&#xff0c;给客户带来实质价值&…

MySQL索引教程(01):创建索引

文章目录 MySQL 创建索引索引介绍MySQL CREATE INDEX 语法MySQL 索引类型MySQL CREATE INDEX 实例结论 MySQL 创建索引 对于一个具有大量数据行的表&#xff0c;如果你根据某个查询条件检索数据时很慢&#xff0c;可能是因为你没有在检索条件相关的列上创建索引。 索引类似于…

小红书矩阵系统源码:赋能内容创作与电商营销的创新工具

在内容驱动的电商时代&#xff0c;小红书凭借其独特的社区氛围和用户基础&#xff0c;成为品牌营销和个人创作者不可忽视的平台。小红书矩阵系统源码&#xff0c;作为支撑这一平台的核心技术&#xff0c;提供了一系列的功能和优势&#xff0c;助力用户在小红书生态中实现更高效…

2024年APMCM亚太杯中文赛A题——飞行器外形的优化问题

飞行器外形的优化问题 解题思路问题一第一问结果第一问代码 完整答案 本篇文章为大家分享2024年APMCM亚太杯中文赛A题——飞行器外形的优化问题的解题思路以及第一问的完整求解代码与结果&#xff0c;四问的完整解答请看文章最后&#xff01; 解题思路 飞行器是在大气层内或大…