vue 脚手架新手入门(vue cli 2)

news2024/11/25 14:27:12

文章目录

  • 写在前面
    • 1、创建一个vue项目
    • 2、项目结构
      • 2.1、写两个页面试试
      • 2.2、代码解释
    • 3、前后端对接
      • 3.1、使用 axios 发起简单请求
      • 3.2、 路由 的使用
        • 3.2.1、配置默认地址前缀
        • 3.2.2、添加子路由
        • 3.2.3、切换路由
        • 3.2.4、监听路由
        • 3.2.5、方法调用 与 页面刷新
        • 3.2.6、this.$route 获取路由信息
      • 3.3、 axios 的使用
        • 3.3.1、post请求
        • 3.3.2、上传文件
    • 4、Vue函数生命周期
    • 5、打包
      • 5.1、放到spring boot中运行

写在前面

1、安装vue前你需要先安装node.js : https://nodejs.org/zh-cn/download

请安装版本 node.js>=6,npm>3

2、如果你的npm下载依赖速度很慢,请配置淘宝镜像

npm config set registry https://registry.npm.taobao.org     // 配置淘宝镜像
npm config get registry                                     // 查看配置的是哪个地址

3、本文使用的是vue cli 2, 编码工具是vsCode

4、vue开发尽量遵循风格指南,特别是命名,避免一些冲突:https://v2.cn.vuejs.org/v2/style-guide

5、这个网站可以模拟后端接口(在后端接口还没有出来的时候用):http://rap2.taobao.org/account/login

1、创建一个vue项目

安装之前,如果你已经安装了vue 3,下面是卸载相关指令。

npm uninstall -g @vue/cli     // 卸载vue3
npm uninstall -g vue-cli     // 卸载vue2
vue -V                       // 查看vue版本

安装vue,并创建vue项目

npm install -g vue-cli        // 安装vue
vue init webpack my-project   // 创建vue项目my-project,模板是webpack
cd my-project                 // 进入项目目录
npm run dev                   // 启动项目

创建项目时有下面几个选项,大多数可以直接按回车
在这里插入图片描述

最后还有一个是否要为你运行“npm install”,选择“yes,use npm”
详见:https://blog.csdn.net/soulman1234/article/details/106021143

用vsCode打卡项目文件夹,启动后用浏览器访问 http://localhost:8080,就可以看到页面了
在这里插入图片描述

2、项目结构

在这里插入图片描述
主要关注 components 文件夹(组件) 和 index.js(路由)

2.1、写两个页面试试

在components 下新写三个组件:Footer.vue、About.vue、Home.vue
Footer.vue (显示页脚)

<template>
    <div>
        <P> 这是一个页脚 </P>
    </div>
</template>

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

Home.vue(主页)

<template>
  <div class="home">
    <h1>{{ title }}</h1>
    <div>
      <a href="#/home"> 主页 </a>
      <a href="#/about"> 关于 </a>
    </div>
  </div>
</template>

<script>
import Footer from './Footer'
export default {
  name: 'Home',
  data () {
    return {
      title: '这是主页'
    }
  },
  components: {
    Footer // 注册主键
  }
}
</script>

<style scoped>
.home {
  color: #42b983;
}
</style>

About.vue (关于页面)

<template>
  <div class="about">
    <h1>{{ title }}</h1>
    <div class="about">
      <a href="#/home"> 主页 </a>
      <a href="#/about"> 关于 </a>
    </div>
    <Footer></Footer>
  </div>
</template>

<script>
import Footer from './Footer'

export default {
  name: 'About',
  data () {
    return {
      title: '关于我们'
    }
  },
  methods: {

  },
  components: {
    Footer // 注册主键
  }
}
</script>

在index.js里面配置 About和Home 的路由

import Vue from 'vue'
import Router from 'vue-router'
import Home from '@/components/Home'
import About from '@/components/About'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      redirect: '/home'
    }, {
      path: '/about',
      component: About
    }, {
      path: '/home',
      component: Home
    }
  ]
})

下面是新的目录结构(我把新建项目时生成的HelloWorld.vue删除了)
在这里插入图片描述

输入npm run dev启动,访问 http://localhost:8080
在这里插入图片描述

2.2、代码解释

Footer.vue 页脚
在这里插入图片描述

在Home组件里面引用 Footer组件
在这里插入图片描述

在路由里面注册 /home 路径
在这里插入图片描述

图片的引用
在这里插入图片描述

3、前后端对接

以下接口来自 http://rap2.taobao.org/ 模拟接口

3.1、使用 axios 发起简单请求

安装

npm install axios

在index.js中导入axios

import axios from 'axios'
Vue.prototype.$http = axios   // 替换vue内部的$http

在这里插入图片描述
请求示例:(About.vue)

<template>
  <div class="about">
    <h1>{{ title }}</h1>
    <div class="about">
      <a href="#/home"> 主页 </a>
      <a href="#/about"> 关于 </a>
    </div>
    <Footer></Footer>
    <table border="1">
      <tr v-for="(user, index) in users" :key="index">
        <td>{{ user.id }}</td>
        <td>{{ user.name }}</td>
      </tr>
    </table>
  </div>
</template>

<script>
import Footer from './Footer'

export default {
  name: 'About',
  data () {
    return {
      title: '关于我们',
      users:[]
    }
  },
  methods: {

  },
  components: {
    Footer
  },
  created(){
      this.$http.get("http://rap2api.taobao.org/app/mock/311480/haha").then(res=>{
        console.log(res.data);
        this.users = res.data.users;
      });
    }
}
</script>

图解
在这里插入图片描述

3.2、 路由 的使用

3.2.1、配置默认地址前缀

在index.js里面加入以下配置

axios.defaults.baseURL = "http://XXXXX:8081"

在这里插入图片描述

3.2.2、添加子路由

新建组件 AboutDetail.vue

<template>
    <div>
      <p>{{ info }}</p>
    </div>
 </template>
  
  <script>
  export default {
    data () {
      return {
        info: '这是一段关于网站的介绍'
      }
    }
  }
  </script>

在index.js中添加子路由
在这里插入图片描述

在 About.vue中引用
在这里插入图片描述

3.2.3、切换路由

在这里插入图片描述

3.2.4、监听路由

第一种全局监控,每次进入页面之前都会触发,可以根据需求而定操作。

router.beforeEach(){
	//你的操作
}

第二种就是写在页面里面的,这种配合vuex,或者事件管理会更方便,当然这个也是根据需求而定。

data(){
	return {}
},
computed{},
mounted{},
watch{
	'$route' (to, from) {
	      console.log(to)
	      console.log(from)
	}
}

3.2.5、方法调用 与 页面刷新

请添加图片描述

3.2.6、this.$route 获取路由信息

export default {
  methods: {
    getPath() {
      const path = this.$route.path; // 获取当前路由路径
    },
    getName() {
      const name = this.$route.name; // 获取当前路由名称
    },
    getMeta() {
      const meta = this.$route.meta; // 获取当前路由元数据
    },
    redirect() {
      this.$router.push('/new-url'); // 重定向到指定路由
    },
    switchTo() {
      this.$router.push('/another-url'); // 切换到指定路由
    },
    push() {
      this.$router.push('/new-url'); // 添加路由到历史记录中
    },
    replace() {
      this.$router.replace('/another-url'); // 替换当前路由为指定路由
    },
    go(n) {
      this.$router.go(n); // 跳转到历史记录中的第 n 个路由
    },
    history() { 
       return this.$router.history; // 访问当前路由的历史记录 
    },
   	getQueryParams() {
      const params = this.$route.query; // 获取 URL 查询参数的值
      console.log(queryParams); // 输出:{ key1: 'value1', key2: 'value2' }
    },
    getParams() {
      const params = this.$route.params; // 获取 URL 参数的值
      console.log(pathParams); // 输出:['page', '1', 'John']
    },
}

3.3、 axios 的使用

3.3.1、post请求

const obj={
  id:1,
  name: 'name'
}
this.$http.post('url接口地址',obj).then((res)=>{
  	console.log(res)
}),

3.3.2、上传文件

<form>
    <input type="text" value="" v-model="name" placeholder="请输入用户名">
    <input type="text" value="" v-model="age" placeholder="请输入年龄">
    <input type="file" @change="getFile($event)">
    <button @click="submitForm($event)">提交</button>
</form>
	data: {
          name: '',
          age: '',
          file: ''
        },
        methods: {
          getFile(event) {
            this.file = event.target.files[0];
            console.log(this.file);
          },
          submitForm(event) {
            event.preventDefault();
            let formData = new FormData();
            formData.append('name', this.name);
            formData.append('age', this.age);
            formData.append('file', this.file);
 
            let config = {
              headers: {
                'Content-Type': 'multipart/form-data'
              }
            }
 
            this.$http.post('http://127.0.0.1:8081/upload', formData, config).then(function (response) {
              if (response.status === 200) {
                console.log(response.data);
              }
            })
          }
        }

4、Vue函数生命周期

<script>
export default {  
  // 在实例初始化之后,数据观测和事件配置之前被调用
  beforeCreate(){
    console.log('beforeCreate----创建前');
  },
  // 实例已经创建完成之后被调用
  created(){
    console.log('created----创建之后');
  },
  // 页面准备挂载时候被调用,此时相关的渲染函数首次被调用
  beforeMount(){
    console.log('beforeMount----挂载开始');
  },
  // 挂在完成,也就是模板中的HTML渲染到HTML页面中,此时一般可以做一些ajax操作,mounted只会执行一次。
  mounted(){
    console.log('mounted----挂载完成');
  },
  // 数据更新之前被调用
  beforeUpdate(){
    console.log('beforeUpdate----更新之前被调用');
  },
  //数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子
  updated(){
    console.log('updated----更新后');
  },
  // 我们将要销毁整个页面或实例时调用
  beforeDestroy(){
    console.log('beforeDestroy----销毁前');
  },
  // 我们的整个页面或实例被销毁之后调用
  destroyed(){
    console.log('destroyed----销毁后');
  },
  // 被 keep-alive 缓存的组件激活时调用
  activated(){
    console.log('activated');
  },
  //  deactivated配合keep-alive来使用
  //  使用了keep-alive就不会调用beforeDestory和destoryed钩子了
  //  因为组件没有被销毁,而是被缓存起来了
  //  所以deactivated钩子可以看做是beforeDestory和destoryed的替代
  deactivated(){
    console.log('deactivated');
  }
}
</script>

5、打包

打包指令

npm run build

打包完成项目目录下会多一个dist目录
把整个dist放到tomcat或Nginx服务下就可以访问项目

5.1、放到spring boot中运行

yml中添加配置

spring:
  web:
    resources:
      static-locations: classpath:/static/

把整个dist文件放到 resources/static/ 中
在这里插入图片描述
然后修改index.html中资源路径(前面加上 /项目路径/dist )
在这里插入图片描述
启动,访问
http://127.0.0.1:8080/dist/index.html

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

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

相关文章

Golang笔记:执行外部程序与Shell命令

文章目录 目的使用演示Cmd结构体总结 目的 程序中执行外部程序是比较常用的功能&#xff0c;Golang执行外部程序可以使用标准库中的 os/exec https://pkg.go.dev/os/exec 。这个包默认是用来执行外部程序的&#xff0c;可以通过调用Shell程序来执行Shell命令。这篇文章将对相关…

FastDFS集群搭建及StringBoot整合

简介 FastDFS是一个开源的轻量级分布式文件系统&#xff0c;它对文件进行管理&#xff0c;功能包括&#xff1a;文件存储、文件同步、文件访问&#xff08;文件上传、文件下载&#xff09;等&#xff0c;解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务&…

MySQL-5.56-MariaDB 转到MySQL-8.0.33过程笔记

MySQL-5.56-MariaDB 转到MySQL-8.0.33过程笔记 将MySQL 5中的数据导出并导入到MySQL8中在MySQL8中执行带有 GROUP BY的语句时会报错&#xff1a;同样的SQL查询语句&#xff0c;在MySQL5&#xff08;这里测试是5.5版本-MaraiaDB&#xff09;执行速度正常&#xff0c;但是在MySQL…

<IBM AIX> 《AIX中HA的网卡IP确认方法》

《HA网卡确认方法》 1 HA IP地址类型2HA IP地址设置原则3 HA网卡日常查看方法3.1 查看hosts文件3.2 查看网卡和IP 4 通过命令方式直接查看5 直接查看HA配置4 HA网卡SMIT查看方法&#xff08;暂不完整&#xff09;4.1 根据hosts文件确认IP对应的别名4.2 根据serviceIP确认Persis…

具有区域/边缘一致性的形状感知弱/半监督Disc and Cup状物分割

文章目录 Shape-Aware Weakly/Semi-Supervised Optic Disc and Cup Segmentation with Regional/Marginal Consistency摘要本文方法Modified Signed Distance Function (mSDF )Dual Consistency Regularisation of Semi-SupervisionDifferentiable vCDR estimation of Weakly S…

vue3+vite+多页面应用(MPA)示例

环境配置&#xff1a; 在硬盘里找个地方放项目内容&#xff1a;如&#xff1a;E:\vue3vitepros&#xff0c; 打开vscode,菜单》终端》新建终端&#xff0c;输入命令&#xff1a;cd E:\vue3vitepros 回车,然后依次运行下面命令&#xff1a; 1&#xff0c;安装vite:安装过的忽略此…

【开发必备】推荐几个非常好用的前端VsCode插件,快来看看你都用过哪些?

VSCode是前端开发的武器&#xff0c;下面给大家推荐几个必备的、非常好用的前端VsCode插件 1.Better Align Better Align就是一款能够实现代码规范的工具&#xff0c;它主要用于代码的上下对齐。它能够用冒号&#xff08;&#xff1a;&#xff09;、赋值&#xff08;&#xf…

Mybatis根据Bean生成对应的SQL语句工具类

Mybatis根据Bean生成对应配置SQL的语句 前言为什么不用MyBatis-PlusMybatis的困扰插入和更新查询 crud工具类MybatisCrudHelp.java 测试类需要注意的点 前言 在进入这一节知道MyBatis-Plus的人可能有人要问了&#xff1a;为什么我不用Mybatis-plus&#xff1f; 为什么不用MyB…

【JAVAEE】单例模式的介绍及实现(懒汉模式和饿汉模式)

目录 1.单例模式 1.1概念 1.2单例模式的实现方式 怎么去设计一个单例 饿汉模式 懒汉模式 懒汉模式-多线程版 解决懒汉模式多线程不安全问题-synchronized 解决懒汉模式多线程不安全问题-volatile 1.单例模式 1.1概念 单例是一种设计模式。 啥是设计模式 ? 设计模式…

机器学习——弹性网估计

机器学习——弹性网估计 文章目录 机器学习——弹性网估计[toc]1 模型介绍2 模型设定3 弹性网估计 1 模型介绍 弹性网估计属于惩罚回归&#xff0c;常见的惩罚回归包括岭回归(ridge)、套索回归(lasso)和弹性网(elasticnet)回归等。 岭回归用于缓解高维数据可能的多重共线性问…

aws exam

Route 53 Route 53 是AWS的一个服务&#xff0c;它的主要功能如下&#xff0c;下面会一一介绍每个功能 Domain registration&#xff08;域名注册&#xff09;DNS management&#xff08;DNS管理&#xff09;Health check&#xff08;健康检查&#xff09;Routing polices&am…

K8S系列之NetworkPolicy

什么是NetworkPolicy IP 地址或端口层面&#xff08;OSI 第 3 层或第 4 层&#xff09;控制网络流量&#xff0c; 则你可以考虑为集群中特定应用使用 Kubernetes 网络策略&#xff08;NetworkPolicy&#xff09;。 NetworkPolicy 是一种以应用为中心的结构&#xff0c;允许你设…

浅析EasyCVR视频汇聚技术在城市智慧文旅数智平台中的应用意义

一、背景分析 根据文化和旅游部4月21日公布的2023年一季度国内旅游数据情况抽样调查统计结果显示&#xff0c;2023年一季度&#xff0c;国内旅游总人次12.16亿&#xff0c;比上年同期增加3.86亿&#xff0c;同比增长46.5%。其中&#xff0c;城镇居民国内旅游人次9.44亿&#x…

消息和消息队列、以及作用场景(一)

“消息”是在两台计算机间传送的数据单位。消息可以非常简单&#xff0c;例如只包含文本字符串&#xff1b;也可以更复杂&#xff0c;可能包含嵌入对象。 “消息队列”是在消息的传输过程中保存消息的容器。 目前的消息队列有很多&#xff0c;例如&#xff1a;Kafka、RabbitMQ…

包装三年经验拿21K,试用期没过完就被裁了....

最近翻了一些网站的招聘信息&#xff0c;把一线大厂和大型互联网公司看了个遍&#xff0c;发现市场还是挺火热的&#xff0c;虽说铜三铁四&#xff0c;但是软件测试岗位并没有削减多少&#xff0c;建议大家有空还是多关注和多投简历&#xff0c;不要闭门造车&#xff0c;错过好…

Redis命令详解

Redis是一个高性能的内存键值数据库&#xff0c;它支持多种数据结构&#xff0c;包括字符串、哈希、列表、集合、有序集合等。Redis通过提供一组命令来实现对数据的操作&#xff0c;这些命令可以通过Redis客户端发送给Redis服务器&#xff0c;从而对数据库进行操作。 Redis的一…

阿里云刘伟光:2 万字解读金融级云原生

作者&#xff1a;刘伟光&#xff0c;阿里云智能新金融&互联网行业总裁、中国金融四十人论坛常务理事&#xff0c;毕业于清华大学电子工程系 01 前言 2015年云原生理念提出的时候&#xff0c;彼时全球金融百年发展形成的信息化到数字化的背后&#xff0c;金融级的技术服务…

好用工具第1期:手机电脑同屏QtScrcpy

QtScrcpy 可以通过 USB / 网络连接Android设备&#xff0c;并进行显示和控制。无需root权限。 同时支持 GNU/Linux &#xff0c;Windows 和 MacOS 三大主流桌面平台。 QtScrcpy 是一个开源项目, 项目地址是: https://github.com/barry-ran/QtScrcpy 它专注于: 精致 (仅显示设…

Java 责任链模式详解

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;它用于将请求的发送者和接收者解耦&#xff0c;使得多个对象都有机会处理这个请求。在责任链模式中&#xff0c;有一个请求处理链条&#xff0c;每个处理请求的对象都是一个…

mysql数据库基础知识,mysql数据库简介(一看就懂,一学就会)

目录 一、MySQL学习路线二、MySQL常见操作1、查看所有数据库show databases。2、MySQL 创建数据库3、删除数据库4、选择数据库use databasename5、查看该数据库下所有表show tables6、创建数据库表7、删除数据库 三、增删改查1、插入数据2、查询数据3、where子句4、更新语句5、…