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 ... 
随机推荐
- cassandra权威指南读书笔记--cassandra查询语言
			cassandra使用一个特殊主键(复合键)表示宽行,宽行也叫分区.复合键由一个分区键和一组可选的集群列组成.分区键用于确定存储行的节点,分区键也可以包含多个列.集群键用于控制数据如何排序以及在分区中 ... 
- 使用VisualStudio直接运行简单的C#语句
			场景 经常有这样的需求, 想要测试一些简单的C#语法, 或者测试一下 文件 目录 操作相关的Api, 通常的做法是建立一个C#控制台项目, 然后写代码测试, 但是这样的做法对测试简单的语法和Api来说 ... 
- HDOJ1232 畅通工程 DFS
			很早之前就做过的题以前用并查集做的 现在用DFS重做算是熟悉DFS吧 #include<stdio.h>#include<string.h>const int size=100 ... 
- 洛谷 P5057 [CQOI2006]简单题 (树状数组,位运算)
			题意:有一个长度为\(n\)的数组,进行\(m\)次操作,每次读入一个值\(t\),如果\(t=1\),则将区间\([l,r]\)的数字反转,若\(t=2\),则查询下标为\(i\)的值. 题解:树状 ... 
- Centos7 搭建Nginx+rtmp+hls直播推流服务器
			1 准备工具 使用yum安装git [root~]# yum -y install git 下载nginx-rtmp-module,官方github地址 // 通过git clone 的方式下载到服务 ... 
- [Golang]-1 Slice与数组的区别
			目录 数组 1.创建数组: 2.数组是值拷贝传递: 切片(slice) 1.首先看看slice的源码结构: 2.slice的创建: 3.slice使用make创建 4.切片作为参数传递 5.Golan ... 
- Kubernets二进制安装(13)之部署Flannel
			Flannel简介  Flannel是CoreDNS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址 ... 
- 二分类问题中混淆矩阵、PR以及AP评估指标
			仿照上篇博文对于混淆矩阵.ROC和AUC指标的探讨,本文简要讨论机器学习二分类问题中的混淆矩阵.PR以及AP评估指标:实际上,(ROC,AUC)与(PR,AP)指标对具有某种相似性. 按照循序渐进的原 ... 
- cheerio &  jQuery for server
			cheerio & jQuery for server Fast, flexible & lean implementation of core jQuery designed spe ... 
- Redis 大 key 问题 & 问题分析 & 解决方案
			Redis 大 key 问题 & 问题分析 & 解决方案 Redis 什么是 Redis 大 key 单个key 存储的 value 很大 hash, set,zset,list 结构 ... 
