Vue框架新手教程,一步步搭建即开即用Vue项目:Vue集成axios,Vuex,route和element.js

MACS2软件进行Peak calling MACS2可以检出ChIP-Seq,ATAC-seq 以及 MeRIP-seq (RNA甲基化测序) 等富集的序列。peaks calling 有不同的方法,MACS2是最常用的call peaks工具。 MACS全称Model-based Analysis of ChIP-Seq,最初的设计是用来鉴定转录因子的结合位点,但是它也可以用于其他类型的富集方式测序。usage: macs2 [-h] [--version] {callpeak,bdgpeakcall,bdgbroadca 阅读详情

1 背景

平时比较闲的时候呢,喜欢帮别人写写毕业设计,做做课设题目.但本人是正经的Java开发,前端那东西每次呢都是从其他开源项目扒下来修修补补.这两天比较闲,想着自己搭一个即开即用的Vue项目,日后就在element上面找找组件修改修改就可用那种.

搜了搜博客发现.写Vue框架的不少,但是集成度比较高的几乎没有.像axios和springboot微服务搭配肯定会遇到跨域问题和请求头信息携带的问题,直接调用在实际项目实在是不科学.但是在以往的vue项目搭建博客中,我却没有看见这一点.

心想,既然自己要做,那么顺便也记录一下搭建过程,给后来者提供一个思路,于是便有了这篇博客

2 项目准备

2.1 下载安装node.js

Vue项目依赖于node.js,所以首先应该安装node.js.进入node.js官网,然后下载LTS版本.下载完毕一路直点下一步,基本和安装qq微信什么的没什么区别.
安装完成后,输入npm -v出现版本号,可以认为已经安装结束
在这里插入图片描述

2.2 安装Vue客户端工具Vue Cli并创建一个项目

这一部分内容参见官网Vue Cli,主要就是执行两条命令npm install -g @vue/cli以及vue create vue-demo

  1. 执行npm install -g @vue/cli,查看版本号成功则安装成功
    在这里插入图片描述
  2. 初始化项目:vue create vue-demo然后回车选择default就可以了
    在这里插入图片描述
  3. 接下的操作正如vue cli所给的提示:进入项目目录,然后执行npm run serve
    在这里插入图片描述
  4. 进入图片所提示的local地址,我这里是http://localhost:8081/,如果出现如下界面,那么恭喜你,项目初始化完毕
    在这里插入图片描述

2.3 认识目录结构

前端工具有很多,我这里依然使用Java巨无霸IDE的IDEA(安装一个vue.js就可以无缝使用).目录结构如下图所示
在这里插入图片描述
新手可能会好奇,上上张图片显示的那张V的界面是怎么出来的.我这里简单介绍一下它的渲染流程

  1. index.html里面有个id为app的div,事实上App.vue这个根实例所生成的内容就挂在这个div上面
    在这里插入图片描述
    上图可以看到这个app的div,这个就是Vue实例挂载的dom节点
    在这里插入图片描述
    而app.vue里面可以清楚的看到,里面又引入了一个Helloworld.vue的单文件
  2. 显然,初始化的页面应该是由Helloworld.vue来生成,这里我来验证一下:把helloworld里面的内容改为helloworld
    在这里插入图片描述
    这里我把里面那些乱七八糟的链接全部删除了,改成了Hello world!!
    在这里插入图片描述
    可以看到页面也随之改动,可见页面内容的确是Helloworld这个单文件所渲染出来的,当然v这个图片是App.vue渲染的,仔细看看app.vue就可以知道了

3 框架改造

经过以上步骤,我们已经初始化了一个基础的vue项目.但是显然,这个原始框架还不怎么好用:不支持页面跳转,也不支持后端交互,跟咸鱼没什么区别.
奇怪的很多vue项目初始化博客就停在了上面的步骤,我就想问,搭成这种程度对新手也太不友好了.我相信绝大部分新手做到这里之后,完全不知道下面要干嘛.
为了对新手更友好一点,就由我做一个简单的演示 :一个简单的登录界面,登录成功之后(涉及ajax请求,axios),进行页面跳转(涉及route),并携带app信息(Vuex,全局变量管理).

3.1 页面跳转(route的使用)

  1. 准备2个Vue文件(login.vue和home.vue),并将app.vue指向的单文件由Helloworld改为Login.此步骤完成的效果为:项目主页面是一个home的按钮(app.vue的指向更改成功),单击触发弹窗消息(按钮单击可以触发事件)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  2. 接下来就要进行route的引入:安装vue-router组件,并修改两个js文件:index.js和main.js,以及app.vue文件

App.vue

<template>
  <div id="app">
    <router-view/>
  </div>
</template>

<script>

export default {
  name: 'App'
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

index.js

import Vue from 'vue';
import VueRouter from 'vue-router';

Vue.use(VueRouter)

import Home from '../views/home.vue'
import Login from '../views/login.vue'

export default new VueRouter({
    routes: [{
        path: '/', //登录页面的路由要定义为/,这样在项目运行时就可以直接加载
        name: 'login',
        component: Login
    },
        {
            path: '/home',
            name: 'home',
            component: Home
        }
    ]
})

main.js

import Vue from 'vue'
import App from './App.vue'
import router from './route/index.js'

Vue.config.productionTip = false

new Vue({
  router,
  render: h => h(App),
}).$mount('#app')

login.vue

<template>
    <div class="login">
        <button v-on:click="to_home">home</button>
    </div>
</template>

<script>
    export default {
        name:'Login',
        methods:{
            to_home(){
                alert("THIS IS LOGIN");
                this.$router.replace("/home")
            }
        }
    };
</script>

  1. 效果展示
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    至此,我们已经完成了route的引入

3.2 Element的引入

以上步骤,我们已经可以从一个页面跳转到另外一个页面.接下来我们对页面进行简单的美化工作,也就是引入element组件

3.2.1 引入Element组件

老规矩,首先进入Element的官网调研一波,点此进入Element官网.由官网可知,要在项目中引入element,大致分为两步:

  1. 安装组件:npm i element-ui -S
  2. main.js中引入element
    至此main.js应该是下面这样的:
import Vue from 'vue'
import App from './App.vue'
import router from './route/index.js'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';

Vue.config.productionTip = false
Vue.use(ElementUI);

new Vue({
  router,
  render: h => h(App),
}).$mount('#app')
3.2.2 Element实战使用Element的button组件替换原生button

简单来说,就是查看Element官网的组件介绍,然后直接复制组件的代码到项目文件中即可,比如button的使用

  1. 进入element官网,找到button组件:Element官网
    在这里插入图片描述
  2. 复制分享按钮的代码<el-button type="primary" icon="el-icon-share"></el-button>,替换掉login中原生的button
    login.vue
<template>
    <div class="login">
<!--        <button v-on:click="to_home">home</button>-->
        <el-button type="primary" icon="el-icon-share" v-on:click="to_home">home</el-button>
    </div>
</template>

<script>
    export default {
        name:'Login',
        methods:{
            to_home(){
                alert("THIS IS LOGIN");
                this.$router.replace("/home")
            }
        }
    };
</script>

效果如下
在这里插入图片描述
至此,我们已经掌握element组件引入的方法:查看官网的组件介绍,复制组件代码并根据自己的需要做成一定更改

3.2.3 实战:利用改造login和home => login改为表单形式,而home改为表格形式
  1. login改为表单,并且自带判空功能
    在这里插入图片描述
    login.vue
<template>
    <div class="login">
        <!--        <button v-on:click="to_home">home</button>-->
        <!--        <el-button type="primary" icon="el-icon-share" v-on:click="to_home">home</el-button>-->
        <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
            <el-form-item label="账号" prop="name">
                <el-input v-model="ruleForm.name"></el-input>
            </el-form-item>
            <el-form-item label="密码" prop="password">
                <el-input v-model="ruleForm.password"></el-input>
            </el-form-item>
            <el-form-item>
                <el-button type="primary" @click="onSubmit('ruleForm')">登录</el-button>
                <el-button>取消</el-button>
            </el-form-item>
        </el-form>
    </div>
</template>

<script>
    export default {
        name: 'Login',
        data() {
            return {
                ruleForm: {
                    name: '',
                    password: ''
                },
                rules: {
                    name: [
                        {required: true, message: '请输入账号', trigger: 'blur'},
                    ],
                    password: [
                        {required: true, message: '请输入密码', trigger: 'blur'}
                    ],
                }
            }
        },
        methods: {
            // to_home() {
            //     alert("THIS IS LOGIN");
            //     this.$router.replace("/home")
            // },
            onSubmit(formName) {
                this.$refs[formName].validate((valid) => {
                    if (valid) {
                        alert('submit!');
                        this.$router.replace("/home")
                    } else {
                        console.log('error submit!!');
                        return false;
                    }
                })
            }
        }
    };
</script>
<style scoped="scoped">
    .login {
        width: 400px;
        margin: auto;
    }
</style>

3.3 axios组件的使用和封装

  1. 引入axios和qs组件
  2. 修改ajax.js和main.js
    ajax.js
import Vue from 'vue'
import ajax from 'axios';

const service = ajax.create({
    baseURL:'http://localhost:8094',
    timeout: 1000 * 30,
    withCredentials: false // 允许跨域带token
})

service.interceptors.request.use(config => {
    if (config.method === "post") {
        if (Object.prototype.toString.call(config.data) === '[object Object]') {
            config.data = Vue.prototype.$qs.stringify({...config.data })
        }
    }
    return config
}, error => {
    return Promise.reject(error)
})

Vue.prototype.$http = service;

main.js
尤其要注意:import "./common/utils/ajax.js";,如果没有这一句,那么会报$http不是方法

import Vue from 'vue'
import App from './App.vue'
import router from './route/index.js'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import qs from 'qs'
import "./common/utils/ajax.js";

Vue.config.productionTip = false
Vue.use(ElementUI);

Vue.prototype.$qs=qs

new Vue({
  router,
  render: h => h(App),
}).$mount('#app')
  1. login中使用ajax完成登录功能
<template>
    <div class="login">
        <!--        <button v-on:click="to_home">home</button>-->
        <!--        <el-button type="primary" icon="el-icon-share" v-on:click="to_home">home</el-button>-->
        <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
            <el-form-item label="账号" prop="name">
                <el-input v-model="ruleForm.name"></el-input>
            </el-form-item>
            <el-form-item label="密码" prop="password">
                <el-input v-model="ruleForm.password"></el-input>
            </el-form-item>
            <el-form-item>
                <el-button type="primary" @click="onSubmit('ruleForm')">登录</el-button>
                <el-button>取消</el-button>
            </el-form-item>
        </el-form>
    </div>
</template>

<script>
    export default {
        name: 'Login',
        data() {
            return {
                ruleForm: {
                    name: '',
                    password: ''
                },
                rules: {
                    name: [
                        {required: true, message: '请输入账号', trigger: 'blur'},
                    ],
                    password: [
                        {required: true, message: '请输入密码', trigger: 'blur'}
                    ],
                }
            }
        },
        methods: {
            // to_home() {
            //     alert("THIS IS LOGIN");
            //     this.$router.replace("/home")
            // },
            onSubmit(formName) {
                this.$refs[formName].validate((valid) => {
                    if (valid) {
                        alert('submit!');
                        this.checkLogin();

                    } else {
                        console.log('error submit!!');
                        return false;
                    }
                })
            },
            checkLogin(){
                this.$http({
                    url:'http://localhost:8094/user/login',
                    method:'post',
                    data:this.$qs.stringify({
                        username:this.ruleForm.name,
                        password:this.ruleForm.password
                    })
                }).then(res=>{
                    let data=res.data;
                    if(data.code===0){
                        alert("登录成功");
                        this.$router.replace("/home")
                    }else {
                        alert("登录失败,原因为:"+data.msg)
                    }
                })
            }
        }
    };
</script>
<style scoped="scoped">
    .login {
        width: 400px;
        margin: auto;
    }
</style>

登录失败时的界面:
在这里插入图片描述
附上:后端代码
UserVO

@SuperBuilder
@AllArgsConstructor
@Setter
@Getter
public class UserVO implements Serializable {

    private static final long serialVersionUID = -442947605606160969L;

    @NotNull(message = "账号不允许为空")
    private String username;

    @NotNull(message = "密码不允许为空")
    @Length(min = 4,max = 12,message = "密码长度不低于4位,不高于12位")
    private String password;


}

UserController

@Controller
@RequestMapping("/user")
public class UserController {

    @PostMapping("login")
    @ResponseBody
    public Object login(@Validated UserVO user) {
        if ("admin".equals(user.getUsername()) && "admin".equals(user.getPassword()))
            return ReturnDTO.success();
        else
            return ReturnDTO.fail("账号或密码错误");
    }
}

全局异常处理:

@ControllerAdvice
public class GlobalException {


    @ExceptionHandler(value={BindException.class})
    @ResponseBody
    public Object exception(BindException e){
        String defaultMessage = e.getAllErrors().get(0).getDefaultMessage();
        return ReturnDTO.fail(defaultMessage);
    }

    @ExceptionHandler(value={Exception.class})
    @ResponseBody
    public Object exception(Exception e){
        e.printStackTrace();
        return ReturnDTO.fail("系统错误,原因为:"+e.getMessage());
    }
}

跨域配置:

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    /**
     * 页面跨域访问Controller过滤
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        WebMvcConfigurer.super.addCorsMappings(registry);
        registry.addMapping("/**")
                .allowedHeaders("*")
                .allowedMethods("POST","GET")
                .allowedOrigins("*");
    }
}

在 SAP BTP 上为应用开启多租户能力:基于 SaaS Provisioning 和 XSUAA 的完整实践指南 本文介绍了在SAP BTP上配置多租户应用的实战指南。主要内容包括: 多租户架构概述:解释provider子账户、consumer子账户和tenant的概念,以及数据隔离机制。 安全配置:在xs-security.json中设置tenant-mode为shared,并为SaaS Provisioning服务添加回调scope授权。 路由配置:通过manifest.yml设置TENANT_HOST_PATTERN来定义多租户访问模式,确保不同租户通过不同子域名访问同一应用。 服务绑定:将XSUAA和SaaS 阅读详情

相关推荐

Ubuntu 20.04 server 安装

Ubuntu 20.04 server 安装 前面我们介绍了 Ubuntu Desktop 版本的安装,今天我们来看看 Ubuntu server 版本的安装。Ubuntu Server 版本的安装和 Desktop 有很大的区别,并且全程不能使用鼠标,只能通过键盘。 从光盘或 U 盘启动到 Welcome 界面,选择语言,一般都是使用 English,所以保保持默认,直接按回车即可; 系统检测到了新的版本,问你是否是否更新,这里我们不需要安装新的版本,所以选项 Continue without upda

as900的博客 1万+

Vue学习笔记(一)——搭建自己的Vue项目及框架结构解释

好久没有学习了,最近也是搬到了一个新的城市,要面临租房子,找工作等一系列问题,所以学习也被耽误了一段时间,这周末就来简单学习一下Vue吧。学习Vue的原因是因为面试的时候有一家公司问我会不会Vue,我说我会使用,但是没有自己的前端项目,就直接被过滤了,所以觉得还是一点点学习一下Vue,然后自己再做一个简单的项目才会对以后的工作所有帮助,好啦,正式开始学习。

虚心学习,和气编码 1227

用野火FPGA开发板(EP4CE10)手把手教你实现一个高精度频率计(附完整Verilog代码)

本文详细介绍了基于野火FPGA开发板(EP4CE10)实现高精度频率计的全过程,涵盖等精度测量法的核心原理、Verilog代码实现及优化技巧。通过实际案例演示,帮助开发者掌握1Hz-50MHz范围、精度达0.1%的频率计设计方法,并提供完整的工程代码和实测数据。

weixin_29261711的博客 441

从零开始搭建一个vue项目(保姆级教程)

我这边在本地起了一个后台服务(建议后台服务做好跨域配置),模拟接口访问调用,一共测试了三种方式:①get无参请求 ②get有参请求 ③post请求json传参。新建api文件夹,放在api文件夹下,需要引入http文件,js文件地址:src/api/pageB.js。项目建好之后,就可以配置ui组件了,可以选择npm去装,也可以选择yarn安装,我把两个命令都列出来了。第二步,选择【Vue.js】,输入自己项目的名称,点击【Create】生成项目。在main.js中import之后,ui组件才正式生效。

weixin_50989469的博客 6417

【HALCON+C#实战】3D点云测量系统开发全攻略:从源码解析到工业应用

本文详细介绍了基于HALCON和C#开发3D点云测量系统的全流程,从环境搭建、核心算法实现到工业应用优化。通过源码解析和实战技巧,帮助开发者解决点云数据处理、几何测量及系统集成中的常见问题,提升工业检测的精度与效率。

brown的博客 211

从0开始学GEE python——Google Earth Engine (GEE) 和 geemap 库来获取 Sentinel-2 卫星影像,并将其可视化

这段代码的目的是从 Sentinel-2 卫星影像中获取特定地点的影像,并将其可视化在地图上。通过设置合适的波段和可视化参数,用户可以清晰地查看该地区的卫星影像。

此星光明博客 1167

搭建一个Vue框架

之前工作的时候,有段时间工作的项目是前后端分离的,感觉前后端分离的模式比较舒服,主要是自己对前后端分离的框架比较好奇,所以准备自己搭建一个基于Vue的前端框架,至于对应的后端的框架,等有时间也整理一个出来。当时因为前端缺人,只给了一个前端框架,然后自己学着使用vue,当时即写前端又写后端,由于对Vue的了解是基于应用层级的,就不细讲vue,但是想自己弄一个前端框架。 1.先安装no......

xiaoye的博客 2万+

RK3588多路MIPI摄像头采集与WiFi低延迟传输实战指南

本文详细介绍了基于RK3588平台实现多路MIPI摄像头同步采集并通过WiFi进行低延迟传输的完整实战方案。文章深入剖析了从V4L2驱动配置、多线程采集、环形缓冲区设计到UDP网络传输优化的核心技术,旨在帮助开发者在工业检测、智能安防等场景下构建高并发、高实时性的视频流系统,实现端到端延迟控制在100毫秒以内的目标。

tensor9flow的博客 788

Vue--Axios详解

Axios 详解

keke的博客 1277

【BUAA】【计组】计算机组成 pre (含详细解析)

BUAA 计算机组成 本文章旨在为@走肖暂时无法接通的系列文章创造一个目录,收藏本文章,方便查阅! 1. 入门测试 2. 基础知识 3. Logisim   欢迎来到 Logisim 的世界   Logisim 门电路   Logisim 组合电路   Logisim 时序电路   Logisim 仿真与调试   应用与挑战 4. Verilog 与仿真工具   前言   ISE 入门   VCS 入门   Verilog 语法   Verilog 题目实例与分析   Verilog 工程的设计开发调试

Schrodinger007的博客 9812

C#面试题及详细答案120道(61-75)-- 多线程与异步

本文摘要了前后端面试题中关于线程与并发的核心知识点,包括线程与进程的区别(61题)、Thread/ThreadPool/Task的对比(62题)、线程安全实现方法(63题)、lock关键字的原理(64题)、Monitor类的进阶用法(65题)以及死锁的成因与避免(66题)。通过C#代码示例和表格对比,清晰展示了多线程编程的关键概念、应用场景及常见问题解决方案,适合开发者快速掌握面试高频考点。完整内容可访问专栏目录获取更多技术面试题解析。

大剑师兰特的GIS世界 1432

vue-cli中使用Axios

vue-cli使用axios

m0_56195330的博客 799

手把手教你学SIMULINK模块库文件专栏-From Workspace 模块详解

模块是 Simulink 中的一个信号源模块,用于从 MATLAB 工作区加载数据作为输入信号。该模块允许用户将预先在 MATLAB 中生成的数据(如时间序列、矩阵或结构体)导入到 Simulink 模型中,从而实现更灵活的信号输入和仿真控制。通过深入了解其参数的影响及结合 MATLAB 脚本的应用,读者可以更加有效地利用这一模块进行仿真和研究。此外,通过实际应用场景的扩展以及常见问题解答部分的帮助,能够更好地掌握。模块是一个非常灵活的工具,适用于需要从 MATLAB 工作区加载数据的各种场景。

MHD0815的博客 635

Vite+vue3+Element-plus+Route+Vuex+Axios项目搭建

Vite+vue3+Element-plus+Route+Vuex项目搭建官网搭建Vite项目启动项目安装Element安装Vue-Router安装Vuex安装vue-i18n国际化插件安装axios 官网 名称 地址 vite https://vitejs.cn/ Element https://element-plus.gitee.io/zh-CN/ Vue-Router https://router.vuejs.org/zh/ Vuex https://vuex.vuejs

qq_43548590的博客 2108

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

搭建一个vue项目(vue+vuex+vue-router+scss+es6+element+axios)

一、安装依赖 选择创建项目所在文件夹,cmd进入该项目 全局安装vue-cli npm install -g @vue/cli //全局安装vue-cli npm uninstall -g vue-cli //卸载全局vue-cli 查看是否安装成功 键入vue --version ,出现以下版本号,则代表成功 二、创建项目 vue create vue-test // vue-test为项目名称 分别代表的是: 选择模式:手动选择配置 选择需要的配置:babel(es6编译)、vue

多喝凉白开 768

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

vue+axios新手实践实现登陆

登陆流程为:1、提交登陆表单,拿到后台返回的数据 2、将数据存入vuex vuex配置 // store index.js import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) // 初始化时用sessionStore.getItem('token'),这样子刷新页面就无需重新登录 const state = { user: ...

haoxinqing222的博客 1056

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

前端框架选型搭建-vue-vuex-route-elementui+axios

简介 开发工具 VSCode, WebStorm 。。。 可以使用自己喜欢的任意开发工具或者文本编辑器 开发环境 Node.js, Npm, Cnpm, Webpack, ES6 框架 Vue.js, Element UI 基础概念 Node.js Node.js是一个Javascript运行环境(runtime)。实际上它是对Google V8引擎进...

一个无聊的程序员的琐碎 2065

vue.js vue-element-admin使用

文章目录使用vscode使用vue-element-admin前端框架启动项目下载项目 & 编译启动配置mock解除mock,调用后台接口权限管理代码梳理登陆、菜单、角色登陆接口获取用户信息接口渲染菜单的流程 --- TODO所有菜单配置在src\router\index.js动态菜单配置(动态路由:根据角色)src\permission.js打开角色菜单更新角色,目前都是mock,没有实...

KelvinLiu 3440

vue2.0+element-ui + eslint + vuex +vue-route

第一步,安装cnpm,通过淘宝的镜像: npm i -g cnpm --registry=https://registry.npm.taobao.org 第二步:设置npm的config npm config set registry https://registry.npm.taobao.org 第三步:安装vue的脚手架 npm install -g @vue/cli 第四步:设置脚手架的全局 cnpm i @vue/cli-init -g 第五步:在计算机的高级系统设置中配置vue.cmd文件

秋来九月八 900

创建vue3+vite+ts+elementplus+router+axios项目

当post请求的数据需要用query的方式传时,复杂类型的传参会出现问题。可以使用qs库的方法使其转换成form-data类型且容易识别的格式。根据父子组件渲染顺序,父组件请求的接口数据是异步到达的,所以子组件里需要再把红框的内容放入watch()方法里面。类似于all会等全部执行完,但是不管reject还是resolve都是从then返回。返回最快执行的那个,最快的是resolve就从then返回,最快的是reject就从catch返回。用数组的方法,比较笨,可以不用看,只是数组的用法比较妙。

Charming_flower的博客 956

基于ThinkPHP5与Vue.js的全栈电商项目实战:从零构建雨具购物平台

在Web开发领域,前后端分离架构已成为构建现代应用的主流范式。其核心原理是将应用逻辑拆分为独立的前端客户端与后端服务,通过API进行数据交互,从而实现关注点分离与团队高效协作。这种架构的技术价值在于提升了系统的可维护性、可扩展性以及前后端开发的并行效率。在众多应用场景中,电商系统因其业务模块完整、逻辑清晰,成为实践全栈开发的经典案例。本文将聚焦于使用ThinkPHP5与Vue.js技术栈,结合MySQL数据库,手把手教你构建一个功能完备的“雨具购物平台”。该项目不仅涵盖了用户认证、商品管理、购物车、订单处理

weixin_34184561的博客 378

Vue项目使用elementui+vuex+routes

安装环境 1. 安装vue+nodejs 略 2.创建项目 vue init webpack 项目名

繁华街角的歇脚处 383

前端-vue路由传参、axios前后台交互、cookie设置

目录 路由传参 标签传参方式:<router-link></router-link> 逻辑传参:this.$router 第一种 第二种 第三种 历史记录跳转 路由汇总大案例 ...

ddt3520的博客 943

vue3 - 前端优秀案例 vue-admin-box 推荐

更新日志经过三个多月的迭代,于2021年8月10日,1.0版本正式发布,并附四个基础模板供大家使用此开源项目为个人开发,不限制任何商业使用和个人研究,使用之前请先点个Star对我进行鼓励利用此开源项目参与的一切违法、色情相关的活动均与本源码无关,请勿以身示法QQ交流群:912804007,有问题群里提,可及时解决vue-admin-box是一个免费并且开源的中后台管理系统模板。使用最新版本的vue3+vite+element-plus开发而成,目的是为了解决通用型的业务中后台系统复杂的配置。

qq_34068440的博客 1833

Vue.js

这里,我们使用了 vue-router 的 createRouter 和 createWebHashHistory 方法,创建了一个使用 hash 模式的路由实例,并注册了一个名为 Login 的路由,对应的组件是我们刚刚创建的 login.vue 组件。这里,我们注册了一个名为 Default 的路由,对应的组件是我们刚刚创建的 default.vue 组件,并定义了一个空的 children 数组,用于存放其他页面组件的路由配置。至此,我们已经实现了用户登录和注销的功能,以及布局组件的编写。

S_i_mple的博客 585

Vue项目axios二次封装实战:从基础拦截器到高级特性

在Web前端开发中,HTTP请求库是连接前后端数据交互的核心桥梁。其工作原理是通过封装浏览器原生API,提供统一的异步请求接口,实现数据的获取与提交。这项技术的核心价值在于提升开发效率、统一错误处理并增强应用的可维护性。在实际工程实践中,尤其是在Vue等现代前端框架构建的单页应用(SPA)中,对请求库进行二次封装已成为构建健壮应用架构的关键步骤。通过设计分层架构,如实例层、拦截器层和业务封装层,可以系统性地处理**Token自动携带**、**错误统一处理**、请求取消等通用问题。这种封装模式能有效应对中大型

weixin_34074740的博客 327
上一篇: Java开发写的Python程序,新手都来看看吧:简单Mysql数据库增删改查,Excel文件导入导出
下一篇: 使用vsftpd服务(FTP)和Nginx(http)搭建图片服务器
一步一结
博客等级 码龄7年 50粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值