路由懒加载的配置:

const Home= () =>import('../components/Home') //使用ES6中的路由懒加载的方式
const About= () =>import('../components/About')
const User= () =>import('../components/User') const HomeNews=()=>import('../components/HomeNews')
const HomeMessage=()=>import('../components/HomeMessage') const Profile=()=>import('../components/Profile')

配置完成后,根据不同组件生成对应的js文件,在加载对应组件的同时加载自己的js文件,这样就做到了一个单个活跃组件加载的情况,对性能比较好。

关于全局导航守卫,和后置钩子

见vue源码:

beforeEach是路由跳转前执行的,afterEach是路由跳转后执行的

通过路由来切换对应组件时,各组件是会被重新创建的,也就是会调用create函数(组件创建的时候调用)和destroyed函数(组件销毁的时候调用)。

reoute-view,是viewrouter中的一个组件,而keep-alive是vue中的一个组件。keep-alive可以使被包含的组件保留状态,不会被重新渲染。

需要注意的是,当一个route-view在使用keep-alive包住的时候,组件状态是会被缓存的,create函数只会调用一次,此时是不会调用destroyed函数的,既然不会调用那么这个组件的状态是不会被重新创建的,这样一来对性能的也是比较好,总而言之就是一个对组件进行缓存的一个东西。

还有两个函数,acivated函数(组件处于活跃时调用),deactivated函数(组件处于不活跃时调用)。这里个函数只有在存在keep-alive的时候才会被调用。

那么有可能存在另外一个需求:就是我希望有的组件时需要不断重新创建然后被销毁的。

那么我们就可以在keep-alive基础上添加一些属性就可以了。

此时,这个交Profile的组件就不会被keep-alive缓存了。

这样这两个组件都不会被缓存

vue在单个组件style中引入css文件可以通过@import "路径" 这种方式去引入

常见错误:在router-view显示不出来的时候,查看路由组件注册中component不能有s!!!

浏览器报错:ncaught (in promise) NavigationDuplicated: Avoided redundant navigation to current location: "/h

解决办法:加上这一行代码:this.$router.replace('/location').catch(err =>{console.log(err)})

在脚手架2中为路径添加别名:

不过在使用的时候需要咋前面加个波浪线。并且要重新dev一下

Vuex:

手写一个vuex,也就是存在一个变量数据,所有组件共享这个数据。注意:这个数据并不是响应式的,之所以在vue中的data是响应式的是因为它依赖于vue底层的一个响应式系统。

            const sharpObj={
name:'hc'
} Vue.Prototype.sharpObj=sharpObj; Vue.component('Cpn2',{
this.sharpObj.name
}) Vue.component('Cpn1',{ }) const app = new Vue({
el:"#app", })

创建vuex的步骤,先再src中创建store文件夹,在文件夹里面创建index.js,代码如下:

import Vue from 'vue'
import Vuex from 'vuex' //1.安装插件,底层会去执行vue.install方法
Vue.use(Vuex) //2.创建对象
const store= new Vuex.Store({ }) //3.导出Store对象
export default store

挂载到main.js

挂载上去之后,它会通过 Vue.prototype.$store=store。而store这里面的值都可以让所有组件去共享,vuex管理这些store里面的值。

综上所述,所有的组件都有一个$store对象

通过this.$store.commit去提交一下,然后调用commit传过去再vuex那边定义的方法

<template>
<div id="app">
<h2>-------{{message}}-------</h2>
<h2>{{$store.state.counter}}</h2>
<button @click="addition">+</button>
<button @click="subtraction">-</button> <h2>-------HelloVuex组件数据-------</h2>
<hello-vuex></hello-vuex>
</div>
</template> <script>
import HelloVuex from './components/HelloVuex.vue' export default {
name: 'App',
components:{
HelloVuex
},
data() {
return {
message: 'app组件数据',
// counter:0
}
},
methods: {
addition(){
this.$store.commit('increment')
},
subtraction(){
this.$store.commit('decrement')
}
}, }
</script> <style>
</style>

通过devtools去调试:

关于getters的用法:

import Vue from 'vue'
import Vuex from 'vuex' //1.安装插件,底层会去执行vue.install方法
Vue.use(Vuex) //2.创建对象
const store = new Vuex.Store({
state: {
counter: 1000,
Student:[
{id:1,name:'hc',age:24},
{id:2,name:'hc1',age:30},
{id:3,name:'hc2',age:20},
{id:4,name:'hc3',age:18},
]
},
//修改state里面的东西
mutations: {
increment(state) {
state.counter++
},
decrement(state) {
state.counter--
}
},
actions: { },
//state中的数据可能会发生变异(改变),利用getters去依赖并获取它改变后的数据,这里的getters和计算属性有些类似,同样也可以缓存state单一状态树中的数据,只有再依赖值发生改变时才去重新计算
//getters:去store拿一些数据的时候,如果state中的数据需要经过变化才给别人用的,就可以再getters中去处理
getters: {
PowerCounter(state){
return state.counter * state.counter
},
//filter过滤一些数据,获取年龄大于20岁的学生
More20Stu(state){
return state.Student.filter(s=>s.age>=20)
},
//获取年龄大于20岁学生的个数
More20StuLength(state,getters){
return getters.More20Stu.length
},
MoreAgeStu(state){
return age=> state.Student.filter(s=>s.age>age)
} },
modules: { } }) //3.导出Store对象
export default store

再app.vue中使用getters:

<template>
<div id="app">
<h2>-------{{message}}-------</h2>
<h2>{{$store.state.counter}}</h2>
<button @click="addition">+</button>
<button @click="subtraction">-</button> <h2>-------App组件的Getter数据</h2>
<h2>{{$store.getters.PowerCounter}}</h2>
<h2>{{$store.getters.More20Stu}}</h2>
<h2>{{$store.getters.More20StuLength}}</h2>
<h2>{{$store.getters.MoreAgeStu(8)}}</h2> <h2>-------HelloVuex组件数据-------</h2>
<hello-vuex></hello-vuex>
</div>
</template> <script>
import HelloVuex from './components/HelloVuex.vue' export default {
name: 'App',
components:{
HelloVuex
},
data() {
return {
message: 'app组件数据',
// counter:0
}
},
methods: {
addition(){
this.$store.commit('increment')
},
subtraction(){
this.$store.commit('decrement')
}
}, }
</script> <style>
</style>

关于Mutation:

mutation携带参数(统称为:payload)的方式:

通过commit去提交一下,变更state中的数据

Mutation提交风格:

在用的时候就这么用:

Mutation类型常量是什么?

在编码过程中,有时候为了代码准确度更高,通常在变量一样的情况下选择拷贝的方式进行替换,vuex实际上也帮我们考虑了这一点。

我们可以通过定义常量统一管理这些名称一样的变量,到时候用的时候直接用常量即可。这里你也可以直接去看官方文档更加容易理解。

关于Actions:

如果通过Actions去更新State里面的值,实际上还是需要走mutation那一步,也就是说要更新state就要走mutation不能直接通过Action更新State,这样devtools是检测不到到底是怎么更新的,这也和上面那个循环图不符合!!!

那么如何去更新呢?

context参数是要带,这里的意思是上下文的意思。

可以把context看作是store,那么context也是可以用通过commit去更新的,再调用mutation的updateInfo定义的方法

要通过dispatch去更新

使用promise:这里的promise在dispatch后做了一次周转。

还有最后一个vuex五大属性的最后一个modules

在vuex的state中,我们知道这里是存储一些组件需要共享的一些变量,而我们现在是崇尚单一状态树,也就是只有一个Store对象管理vuex。那么如果变量变得很多,就会显得state里面变得比较臃肿。

所以他让我们在Store里面具体分模块

这里说明虽然state数据被模块化了,但是vue依然把它放到state中了。

需要注意的是,在使用模块里面的getters时,是可以有三个参数的,根据第三个参数可以拿到外面Store对象里的state的值!!!

模块里面的actions里面的context参数指向的是自己模块的mutations!!!而不是最外面的Store的mutaions

沉淀vue相关知识(主要还是个人积累用)的更多相关文章

  1. vue相关知识

    1.看https://www.bilibili.com/video/av27969216/?p=54,看他的就够了 https://juejin.im/post/5a5bc8c36fb9a01ca26 ...

  2. 数据库相关知识积累(sqlserver、oracle、mysql)

    数据库相关知识积累(sqlserver.oracle.mysql) 1. sqlserver :断开所有连接: (还原数据库) 1.数据库  分离 2. USE master GO ALTER DAT ...

  3. vue基础知识之vue-resource/axios

    Vue基础知识之vue-resource和axios(三)   vue-resource Vue.js是数据驱动的,这使得我们并不需要直接操作DOM,如果我们不需要使用jQuery的DOM选择器,就没 ...

  4. Vue基础知识之vue-resource和axios

    Vue基础知识之vue-resource和axios  原文链接:http://www.cnblogs.com/Juphy/p/7073027.html vue-resource Vue.js是数据驱 ...

  5. web聊天相关知识

    http相关知识 http是无状态,请求,响应模式的通信模式,就是用户每次通过浏览器点击一下页面,都需要重新与web服务器建立一下连接,且发送自己的 session id 给服务器端以使服务器端验证此 ...

  6. OpenCV&Qt学习之四——OpenCV 实现人脸检测与相关知识整理

    开发配置 OpenCV的例程中已经带有了人脸检测的例程,位置在:OpenCV\samples\facedetect.cpp文件,OpenCV的安装与这个例子的测试可以参考我之前的博文Linux 下编译 ...

  7. 微信小程序必知相关知识

    微信小程序必知相关知识 1 请谈谈微信小程序主要目录和文件的作用? project.config.json 项目配置文件,用得最多的就是配置是否开启https校验: App.js 设置一些全局的基础数 ...

  8. Redis相关知识整理

    Redis相关知识整理 1. Redis和MySQL的区别?a).mysql是关系型数据库,而redis是NOSQL,非关系型数据库.mysql将数据持久化到硬盘,读取数据慢,而redis数据先存储在 ...

  9. Vue大概知识体系和学习参考

    Vue大概知识体系和学习参考文档 官方文档学习,参考,借鉴地址:https://cn.vuejs.org/v2/guide/installation.html 菜鸟教程:https://www.run ...

随机推荐

  1. 论文解读(Line)《LINE: Large-scale Information Network Embedding》

    论文题目:<LINE: Large-scale Information Network Embedding>发表时间:  KDD 2015论文作者:  Jian Tang, Meng Qu ...

  2. Netcat基础使用

    netcat命令选项 本文参考文章链接 本文参考文章链接1 本文参考文章链接2 本文参考文章链接3 常用命令选项 ## 网络模式和代理相关 -l 监听,作服务器.不填时作客户端. -u UDP模式.不 ...

  3. 一文带你吃透CLR垃圾回收机制

    前言 今天我们来共同学习一下CLR的垃圾回收机制,这对我们写出健壮性的代码很有帮助,也许有人会认为多此一举,认为垃圾回收交给CLR就行,我不用关心这个,诚然,大多数情况下是这样的,但是,我们今天讨论的 ...

  4. 大厂技术实现 | 腾讯信息流推荐排序中的并联双塔CTR结构 @推荐与计算广告系列

    作者:韩信子@ShowMeAI,Joan@腾讯 地址:http://www.showmeai.tech/article-detail/tencent-ctr 声明:版权所有,转载请联系平台与作者并注明 ...

  5. 深入理解Redis 数据结构—双链表

    在 Redis 数据类型中的列表list,对数据的添加和删除常用的命令有 lpush,rpush,lpop,rpop,其中 l 表示在左侧,r 表示在右侧,可以在左右两侧做添加和删除操作,说明这是一个 ...

  6. R数据科学-1

    R数据科学(R for Data Science) Part 1:探索 by: PJX for 查漏补缺 exercise: https://jrnold.github.io/r4ds-exercis ...

  7. 【宏蛋白组】iMetaLab平台分析肠道宏蛋白质组数据

    目录 一.iMetaLab简介 二.内置工具与模块 1. Data Processing module 2. Functional Analysis 3. R Developing environme ...

  8. Python基础之流程控制if判断

    目录 1. 语法 1.1 if语句 1.2 if...else 1.3 if...elif...else 2. if的嵌套 3. if...else语句的练习 1. 语法 1.1 if语句 最简单的i ...

  9. Python基础之数字类型内置方法

    目录 1. 整型内置方法(int) 2. 浮点型内置方法 3. 常用操作 1. 整型内置方法(int) 用途:年龄,号码,等级等 定义: age = 18 常用操作 # 算数运算.比较运算 age = ...

  10. Excel-电话号码隐藏某几个数为*,起到保护信息作用;

    9.电话号码隐藏某几个数为*,起到保护信息作用: 方法一: =SUBSTITUTE(AG2,MID(AG2,4,5),"*****") 解释函数: MID(目标字符串,裁剪起始位置 ...