一、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项目

  1. 用pycharm打开vue项目
  2. 添加配置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项目创建时发生了什么

  1. 启动项目,加载主脚本文件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初始页面中的挂载点,至此完成渲染);
  2. router被加载,就会解析router文件夹下的index.js脚本文件,完成{路由-组件}的映射关系,根组件就可以进行路由访问。
  3. 在views文件夹中新建 视图组件.vue文件,在路由(router的index.js)中配置,设置路由跳转。
  4. 此时App.vue作为根路由,是唯一用来替换index.html初始页面标签的组件。因此,只有App.vue中有的组件,才会在html页面中渲染出来。而这时,所有的组件都已经在根路由中配置完成。
  5. 只需要在浏览器输入地址,根组件就会通过路由将地址对应的组件独读出,加载到App.vue中的<router-view/>标签中,然后App.vue会加载进HTML页面上,就可以在浏览器中显示了。
  6. 也就是说,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.$routerthis.$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. 路由传参

  1. 路径任意位置直接携带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;
    }
  2. 拼接路径,在路径尾部通过?携带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项目的创建、路由、及生命周期钩子的更多相关文章

  1. Vue的钩子函数[路由导航守卫、keep-alive、生命周期钩子]

    前言 说到Vue的钩子函数,可能很多人只停留在一些很简单常用的钩子(created,mounted),而且对于里面的区别,什么时候该用什么钩子,并没有仔细的去研究过,且Vue的生命周期在面试中也算是比 ...

  2. vue- Vue-Cli脚手架工具安装 -创建项目-页面开发流程-组件生命周期- -03

    目录 Vue-Cli 项目环境搭建 与 python 基础环境对比 环境搭建 创建启动 vue 项目 命令创建项目(步骤小多) 启动 vue 项目(命令行方式) 启动 vue 项目(pycharm 方 ...

  3. Vue ---- 组件文件分析 组件生命周期钩子 路由 跳转 传参

    目录 Vue组件文件微微细剖 Vue组件生命周期钩子 Vue路由 1.touter下的index.js 2.路由重定向 3.路由传参数 补充:全局样式导入 路由跳转 1. router-view标签 ...

  4. vue 项目实战 (生命周期钩子)

    开篇先来一张图 下图是官方展示的生命周期图 Vue实例的生命周期钩子函数(8个)        1. beforeCreate             刚 new了一个组件,无法访问到数据和真实的do ...

  5. vue2.0项目实战(4)生命周期和钩子函数详解

    最近的项目都使用vue2.0来开发,不得不说,vue真的非常好用,大大减少了项目的开发周期.在踩坑的过程中,因为对vue的生命周期不是特别了解,所以有时候会在几个钩子函数里做一些事情,什么时候做,在哪 ...

  6. (day68)Vue-CLI项目、页面跳转和传参、生命周期钩子

    目录 一.Vue-CLI (一)环境搭建 (二)项目的创建 (三)项目目录结构 (四)Vue组件(.vue文件) (五)全局脚本文件main.js(项目入口) (六)Vue请求生命周期 二.页面跳转和 ...

  7. Vue 组件生命周期钩子

    Vue 组件生命周期钩子 # 1)一个组件从创建到销毁的整个过程,就称之为组件的生命周期 # 2)在组件创建到销毁的过程中,会出现众多关键的时间节点, 如: 组件要创建了.组件创建完毕了.组件数据渲染 ...

  8. vue环境配置脚手架搭建,生命周期,钩子

    Vue项目环境搭建 """ node ~~ python:node是用c++编写用来运行js代码的 npm(cnpm) ~~ pip:npm是一个终端应用商城,可以换国内 ...

  9. Vue.js 系列教程 3:Vue-cli,生命周期钩子

    原文:intro-to-vue-3-vue-cli-lifecycle-hooks 译者:nzbin 这是 JavaScript 框架 Vue.js 五篇教程的第三部分.在这一部分,我们将学习 Vue ...

随机推荐

  1. 2019牛客暑期多校训练营(第八场)B-Beauty Values(期望线性性)

    >传送门< 题意:思路:期望的线性性(可加性),比赛的时候写的代码超级无敌长,不过值得欣慰的是一发AC了,官方的题解写的还不错~ 我们可以把每种数字对答案的贡献分开来计算,即枚举每个数字, ...

  2. hdu 4352 XHXJ's LIS(数位dp+状压)

    Problem Description #define xhxj (Xin Hang senior sister(学姐)) If you do not know xhxj, then carefull ...

  3. zjnu1725 COCI (类似二维树状数组模拟)

    Description The 3rd round of COCI is already here! In order to bet on predict the scores, we have as ...

  4. [Golang]-2 Map关联数组与下划线(_)的意义

    目录 map 下划线(underscore) 用在import 用在返回值 用在变量 map map 是 Go 内置关联数据类型(在一些其他的语言中称为哈希 或者字典 ). func main() { ...

  5. 9.[完]其他常用的rabbitmq的参数和设置

    作者 微信:tangy8080 电子邮箱:914661180@qq.com 更新时间:2019-08-12 20:42:25 星期一 欢迎您订阅和分享我的订阅号,订阅号内会不定期分享一些我自己学习过程 ...

  6. hdu 4497 GCD and LCM (非原创)

    GCD and LCM Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total ...

  7. vue & async mounted

    vue & async mounted refs xgqfrms 2012-2020 www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!

  8. web 存储方式汇总:Cookies,Session, Web SQL; Web Storage(LocalStorage ,SessionStorage),IndexedDB,Application Cache,Cache Storage

    1 1 1 web 存储方式汇总: 旧的方式: Cookies; Session; Web SQL; 新的方式 HTML5 : Web Storage(LocalStorage ,SessionSto ...

  9. code to markdown auto converter

    code to markdown auto converter code => markdown how to import a js file to a markdown file? // a ...

  10. skills share & free videos

    skills share & free videos 技术分享 & 免费视频 https://www.infoq.cn/video/list WebAssembly https://w ...