Vue项目的创建、路由、及生命周期钩子
一、Vue项目搭建
1、环境搭建
- 安装node
官网下载安装包,傻瓜式安装:https://nodejs.org/zh-cn/
- 安装cnpm、更换淘宝镜像源
npm install -g cnpm --registry=https://registry.npm.taobao.org
- 安装脚手架
cnpm install -g @vue/cli
- 清空缓存处理
npm cache clean --force
1.1 查看npm/cnpm的下载文件位置和缓存文件信息
npm与cnpm操作命令完全一致
cmd中查看缓存位置
npm config get cache
查看下载文件路径
npm config get prefix
1.2 更改npm/cnpm的下载文件位置和缓存文件信息
更改缓存位置
npm config set cache "D:\Program Files\nodejs\node_cache"
更改下载文件路径
npm config set prefix "D:\Program Files\nodejs\node_global"
2、项目的创建
- 创建项目
1) 进入存放项目的目录
>: cd ***
2) 创建项目
>: vue create 项目名
3) 项目初始化
选择自定义方式创建项目
选择插件
babel(选中) 将es6解析为es5的语法
TypeScript 支持使用 TypeScript 书写源码
PWA 前端优化-rogressive Web App Support支持
router(选中) 支持 vue-router
vuex(选中) 仓库,组件间传参,全局单例,为移动端做辅助,页面刷新,会重新加载仓库,而手机app无法刷新。
css 预编译器,less或sass 支持对css进行逻辑编程
Linter 支持代码风格检查和格式化
历史记录选项:选大写的
保存project:选n不保存
- 启动/停止项目
npm run serve / ctrl+c
// 要提前进入项目根目录
- 打包项目
npm run build
// 要在项目根目录下进行打包操作
3、pycharm配置并启动vue项目
- 用pycharm打开vue项目
- 添加配置npm启动文件,记得选中serve服务
4、vue项目目录结构分析
├── 项目名称
| ├── node_modules // 当前项目所有依赖,一般不可以移植给其他电脑环境
| ├── public
| | ├── favicon.ico // 标签图标
| | └── index.html // 当前项目唯一的页面
| ├── src
| | ├── assets // 静态资源img、css、js
| | ├── components // 小组件
| | ├── views // 页面组件
| | ├── App.vue // 根组件
| | ├── main.js // 全局脚本文件(项目的入口)
| | ├── router
| | | └── index.js// 路由脚本文件(配置路由 url链接 与 页面组件的映射关系)
| | └── store
| | | └── index.js// 仓库脚本文件(vuex插件的配置文件,数据仓库)
| ├── README.md
└ └── package.json等配置文件
5、Vue根据配置重新构建依赖
当你想一致一个项目的时候,由于node_modules文件夹中的依赖环境文件有时候无法复制,你就可以只复制项目中的public
文件夹,src
文件夹和package.json
文件就可以了。
然后可以通过package.json
文件中记载的环境需求重新下载环境。然后就可以将项目运行了。
- 如何重新下载依赖环境
在cmd中进入项目目录,或者在pycharm中打开项目进入terminal;
然后执行以下代码:
>>>:cnpm install
就可以了。
系统会自动从项目文件夹中的package.json文件中识别依赖进行下载。
然而有时候项目中还会有其他的一些依赖是后续安装的,不在package.json文件中,那这个时候项目还是无法运行,不过你在启动时,项目会报错,会提醒你哪些依赖没有安装,这个时候只需要根据项目提示进行后续的手动安装依赖就可以了。
二、Vue项目创建时发生了什么
- 启动项目,加载主脚本文件
main.js
,它是整个项目的启动入口。- 加载
main.js
中导入的模块; - 创建
main.js
中的根组件,挂载index.html
页面中的app标签; - 将已经导入的模块注册到根组件中(router、store);
- 加载自定义的第三方环境与自己配置的环境(后期项目会不断添加)。
- 通过回调render渲染函数将
App.vue
组件渲染进index.html
初始页面中(根组件一创建完成就会回调render函数,render函数所对应的是vue环境自带的read_vue_function
函数,这个函数可以将App.vue
组件读成二进制流替换index.html
初始页面中的挂载点,至此完成渲染);
- 加载
- router被加载,就会解析router文件夹下的index.js脚本文件,完成{路由-组件}的映射关系,根组件就可以进行路由访问。
- 在views文件夹中新建 视图组件.vue文件,在路由(router的
index.js
)中配置,设置路由跳转。 - 此时
App.vue
作为根路由,是唯一用来替换index.html
初始页面标签的组件。因此,只有App.vue
中有的组件,才会在html页面中渲染出来。而这时,所有的组件都已经在根路由中配置完成。 - 只需要在浏览器输入地址,根组件就会通过路由将地址对应的组件独读出,加载到
App.vue
中的<router-view/>
标签中,然后App.vue
会加载进HTML页面上,就可以在浏览器中显示了。 - 也就是说,
App.vue
中有多少个<router-view/>
标签,就会加载多少次组件。
三、项目初始化
1、app.vue总路由配置
只需留下五行代码:
<template>
<div id="app">
<router-view />
</div>
</template>
2、全局css样式配置
需要在main.js配置文件中加载全局css样式,只要加一句话,在任意位置:
// 配置全局样式:@就代表src文件夹的绝对路径,官方提倡require加载静态文件
// import '@/assets/css/global.css'
require('./assets/css/global.css');
然后就可以在global.css文件中配置全局样式了。
四、Vue的路由控制
1. 路由跳转
1.1 标签跳转
通过<router-link to=""></router-link>
标签完成跳转路由,to
属性值为想要跳转的页面路由:
<router-link to="/home">主页</router-link>
1.2 逻辑跳转
有时候可能不会用router-link标签跳转,比如想点击图片跳转,这时候就需要用到逻辑跳转,通过点击事件跳转页面。
可以通过this.$router.push('/home')
方法,跳转到路由为/home
的组件(页面):
<template>
<img src="@/assets/img/logo.svg" alt="" @click="goHome">
</template>
<script>
export default {
name: "Nav",
methods: {
goHome() {
if (this.$route.path !== '/') {
// this.$router.push('/');
this.$router.push({
name: 'home'
}); // 通过name跳转
}
}
}
}
</script>
this.$router
和this.$route
的区别:
this.$router:
- 根组件中的router对象,控制路由,记录所有路径数据,包含历史记录
- 方法:
this.$router.push('/path')
:用来跳转直接路径this.$router.go(2)
:用来跳转历史记录,正为前进,负为后退,数字为步数
this.$route:
当前路由对象,控制路由数据,包含路径path、query和params数据,可以用来利用路由传参
- 方法:
this.$route.query
/this.$route.param
:获取路由传过来的参数
- 方法:
2. 路由重定向
在index.js
中通过redirect
重定向页面,用来开放用户有可能会访问的页面。
不用多个路由对应相同组件的方法是为了防止有些方法需要判断当前页面的path,这就有可能会导致不同路由明明使用了相同的组件,却有部分功能无法使用。
所以需要使用路由的重定向。
// index.js
const routes = [
{
path: '/',
name: 'home',
component: Home
},
{
path: '/home',
redirect: '/', // 路由的重定向
},
]
3. 路由传参
路径任意位置直接携带values参数,通过路由有名分组匹配
如何传参:
<!--第一种路由传参-->
<!--<router-link :to="`/course/detail?pk=${course.id}`">{{ course.title }}</router-link>--> <router-link :to="{
name: 'course-detail',
query: {pk: course.id}
}">{{ course.title }}
</router-link> <!--第二种路由传参-->
<!--<router-link :to="`/course/${course.id}/detail`">{{ course.title }}</router-link>-->
如何匹配路由:
// 路由文件 index.js const routes = [
{
path: '/course/:pk/detail',
name: 'course-detail',
component: CourseDetail
},
];
如何获取参数:通过params
data() {
return {
pk: 0
}
},
created() {
// 获取路由传递的参数:课程的id
this.pk = this.$route.params.pk;
}
拼接路径,在路径尾部通过
?
携带key=values
形式的参数如何传参:
// 点击跳转事件,直接在路径中传参
goDetail(pk) {
// this.$router.push(`/course/detail?pk=${pk}`);
this.$router.push({
name: 'course-detail',
query: {pk: pk}
});
}
如何匹配路由:
const routes = [
{
path: '/course/detail',
name: 'course-detail',
component: CourseDetail
}
];
如何获取参数:通过query
data() {
return {
pk: 0
}
},
created() {
// 获取路由传递的参数:课程的id
this.pk = this.$route.query.pk;
}
五、Vue组件的生命周期钩子
1. 什么是生命周期钩子
本质是一个函数,会在某个时间节点自动调用。
1、一个组件从创建到销毁的众多时间节点上回调的方法;
2、这些方法都是vue组件实例的成员,不包含于methods属性中;
3、生命周期钩子的作用就是满足在不同时间节点需要完成的事。
2. 生命周期钩子有哪些
2.1 beforeCreate
在组件创建之前调用。
2.2 created(重要)
在组件创建成功后调用。
此时可以向后台请求数据,加载到组件的数据变量中。
2.3 beforeMount
在组件加载之前调用。
2.4 mounted(重要)
在组件加载完成后调用。
特别耗时的数据请求,可以延后到组件初步加载成功后,再慢慢请求。
先给客户渲染一个组件框架,在慢慢渲染数据,以防客户以为服务器崩了而不是卡了。
2.5 destroyed
在组件销毁后调用。
Vue项目的创建、路由、及生命周期钩子的更多相关文章
- Vue的钩子函数[路由导航守卫、keep-alive、生命周期钩子]
前言 说到Vue的钩子函数,可能很多人只停留在一些很简单常用的钩子(created,mounted),而且对于里面的区别,什么时候该用什么钩子,并没有仔细的去研究过,且Vue的生命周期在面试中也算是比 ...
- vue- Vue-Cli脚手架工具安装 -创建项目-页面开发流程-组件生命周期- -03
目录 Vue-Cli 项目环境搭建 与 python 基础环境对比 环境搭建 创建启动 vue 项目 命令创建项目(步骤小多) 启动 vue 项目(命令行方式) 启动 vue 项目(pycharm 方 ...
- Vue ---- 组件文件分析 组件生命周期钩子 路由 跳转 传参
目录 Vue组件文件微微细剖 Vue组件生命周期钩子 Vue路由 1.touter下的index.js 2.路由重定向 3.路由传参数 补充:全局样式导入 路由跳转 1. router-view标签 ...
- vue 项目实战 (生命周期钩子)
开篇先来一张图 下图是官方展示的生命周期图 Vue实例的生命周期钩子函数(8个) 1. beforeCreate 刚 new了一个组件,无法访问到数据和真实的do ...
- vue2.0项目实战(4)生命周期和钩子函数详解
最近的项目都使用vue2.0来开发,不得不说,vue真的非常好用,大大减少了项目的开发周期.在踩坑的过程中,因为对vue的生命周期不是特别了解,所以有时候会在几个钩子函数里做一些事情,什么时候做,在哪 ...
- (day68)Vue-CLI项目、页面跳转和传参、生命周期钩子
目录 一.Vue-CLI (一)环境搭建 (二)项目的创建 (三)项目目录结构 (四)Vue组件(.vue文件) (五)全局脚本文件main.js(项目入口) (六)Vue请求生命周期 二.页面跳转和 ...
- Vue 组件生命周期钩子
Vue 组件生命周期钩子 # 1)一个组件从创建到销毁的整个过程,就称之为组件的生命周期 # 2)在组件创建到销毁的过程中,会出现众多关键的时间节点, 如: 组件要创建了.组件创建完毕了.组件数据渲染 ...
- vue环境配置脚手架搭建,生命周期,钩子
Vue项目环境搭建 """ node ~~ python:node是用c++编写用来运行js代码的 npm(cnpm) ~~ pip:npm是一个终端应用商城,可以换国内 ...
- Vue.js 系列教程 3:Vue-cli,生命周期钩子
原文:intro-to-vue-3-vue-cli-lifecycle-hooks 译者:nzbin 这是 JavaScript 框架 Vue.js 五篇教程的第三部分.在这一部分,我们将学习 Vue ...
随机推荐
- 加快你ROS安装的一篇文章
前言: 首先ROS大家应该比较熟悉了哈,如果需要补充一下请看我之前的这篇文章 <嵌入式的我们为什么要学ROS>,对于嵌入式来说ROS是一个很好的进阶方向,所以如何快速的安装一个ROS到我们 ...
- Codeforces Round #666 (Div. 2) Power Sequence、Multiples of Length 思维
题目链接:Power Sequence 题意: 给你n个数vi,你可以对这个序列进行两种操作 1.可以改变其中任意个vi的位置,无成本 2.可以对vi进行加1或减1,每次操作成本为1 如果操作之后的v ...
- 前、中、后序遍历随意两种是否能确定一个二叉树?理由? && 栈和队列的特点和区别
前序和后序不能确定二叉树理由:前序和后序在本质上都是将父节点与子结点进行分离,但并没有指明左子树和右子树的能力,因此得到这两个序列只能明确父子关系,而不能确定一个二叉树. 由二叉树的中序和前序遍历序列 ...
- Triangle War POJ - 1085 极小极大搜索
参考链接:https://www.cnblogs.com/nwpuacmteams/articles/5697873.html 极小极大搜索 的个人理解(alpha-beta剪枝):https://w ...
- Dapr 已在塔架就位 将发射新一代微服务
微服务是云原生架构的核心,通常使用Kubernetes 来按需管理服务扩展. 微软一直走在 Cloud Native Computing Foundation的 最前沿,并通过使用Kubernetes ...
- 二进制方式安装docker(非root用户启动docker)
二进制方式安装docker(非root用户启动docker) 一.下载安装包: 地址:https://download.docker.com/linux/static/stable/x86_64/ 这 ...
- Gitlab日常维护(三)之Gitlab的备份、迁移、升级
一.Gitlab的备份 使用Gitlab一键安装包安装Gitlab非常简单, 同样的备份恢复与迁移也非常简单. 使用一条命令即可创建完整的Gitlab备份 [root@gitlab ~]# gitla ...
- iTerm2终端工具在Mac OS上使用详解
一.概述 因个人工作需要,使用终端工具进行运维和开发工作,但是Mac OS 自带的终端工具使用堡垒机登录配置不了,而且使用CRT等终端工具每次登录堡垒机都需要配置密码,操作起来很麻烦.一直想找一款终端 ...
- C# Dictionaries
Dictionaries 字典 在C# 里是用接口 IDictionary来实现的,最常用的字典就是Dicrtionary<tkey,tvalue>,键值对的形式,和index,item ...
- 基金术语 All In One
基金术语 All In One GP.LP.PE.VC.FOF LP 有限合伙人(Limited Partner, LP):我们可以简单的理解为出资人. 很多时候,一个项目需要投资上千万乃至数个亿的资 ...