vue记录的知识

116 阅读1分钟

一点点的记录

生命周期

beforeCreate: function () {
            console.group('beforeCreate 创建前状态===============》');
            console.log("el     : " + this.$el); //undefined
            console.log("data   : " + this.$data); //undefined
            console.log("message: " + this.message)
        },
        created: function () {
            console.group('created 创建完毕状态===============》');
            console.log("el     : " + this.$el); //undefined
            console.log("data   : " + this.$data); //已被初始化
            console.log("message: " + this.message); //已被初始化
        },
        beforeMount: function () {
            console.group('beforeMount 挂载前状态===============》');
            console.log("el     : " + (this.$el)); //已被初始化,没有值只是点个坑
            console.log(this.$el);
            console.log("data   : " + this.$data); //已被初始化
            console.log("message: " + this.message); //已被初始化
        },
        mounted: function () {
            console.group('mounted 挂载结束状态===============》');
            console.log("el     : " + this.$el); //已被初始化
            console.log(this.$el);
            console.log("data   : " + this.$data); //已被初始化
            console.log("message: " + this.message); //已被初始化
        },
        beforeUpdate: function () {
            console.group('beforeUpdate 更新前状态===============》');
            console.log("el     : " + this.$el);
            console.log(this.$el);
            console.log("data   : " + this.$data);
            console.log("message: " + this.message);
        },
        updated: function () {
            console.group('updated 更新完成状态===============》');
            console.log("el     : " + this.$el);
            console.log(this.$el);
            console.log("data   : " + this.$data);
            console.log("%c%s", "color:red","message: " + this.message);
        },
        beforeDestroy: function () {
            console.group('beforeDestroy 销毁前状态===============》');
            console.log("el     : " + this.$el);
            console.log(this.$el);
            console.log("data   : " + this.$data);
            console.log("message: " + this.message);
        },
        destroyed: function () {
            console.group('destroyed 销毁完成状态===============》');
            console.log("el     : " + this.$el);
            console.log(this.$el);
            console.log("data   : " + this.$data);
            console.log("message: " + this.message)
        }

常用到的组件传值方法

1,父组件传给子组件值
属性传值 props  工作中常用
$parent  $children   $ref 

2,子组件向父组件传改的
发布订阅模式

3,兄弟组件传值 A与B
4,基于ref实现父子组件信息通信
5,$listeners/$attrs
6,vuex 工作中常用

设置属性的getter/setter

设置属性的getter,setter,我们可以在getter,setter中监听当前属性设置和获取的时候干什么

Object.defineProperty(obj,'name',{
	get(){
  	 console.log('Getter');
     return '哈哈'
  }
  set(value){
  	console.log('setter',value);
	}
});
obj.name='123'

vue响应式原理Object.defineProperty

let obj={
	age:12
}
Object.defineProperty(obj,'name',{
  value:'哈哈',
  //=>是否允许当前的属性被删除,默认是false不可以删除,如果被defineProperty里的属性这项才管用,
  //定义在外面的对象可以删除
	configurable:false,
  //=>是否为可枚举的属性,默认是不可以遍历出来的,不可枚举
  enumerable:true,
  //=>是否允许当前属性被修改,false不可以修改
  writable:true
})
delete obj.name;  //这句不可以删除
delete obj.age;   //这句可以删除

vue-router

import Vue from 'vue';
import VueRouter from 'vue-router';
import store from './store/index';
import Custom from './pages/Custom';
	import CustomList from './pages/custom/CustomList';
	import CustomHandle from './pages/custom/CustomHandle';
import System from './pages/System';
	import StaffList from './pages/system/staff/StaffList';
	import StaffHandle from './pages/system/staff/StaffHandle';
	import JobList from './pages/system/job/JobList';
	import JobHandle from './pages/system/job/JobHandle';
	import DepartmentList from './pages/system/department/DepartmentList';
	import DepartmentHandle from './pages/system/department/DepartmentHandle';

Vue.use(VueRouter);

const router=new VueRouter({
	mode:'hash',
	routes:[
		/*
			第一级路由 name: //路由名称 path:路由路径   component:路由对应组件跟文件名保持一致
			如果两个地址用一个组件,只是后面的参数不同那路由也可以配置参数路由
			{
				path: '',
				redirect: {
					path: '/custom/list',
					query: {
						type: 'my' //这里就是默认的参数
					}
				}
			}
			第二级路由都写在children:[

			]


		*/
		//主路由
		{
			path: "/",   //主路由重定向至company组件
			redirect: "/Custom"
		},
		{
			name: "custom", //路由名称
			path: "/custom", //路由路径
			component: Custom, //路由对应组件
			children:[
				{
					path:'',
					redirect:{
						path:'/custom/list',
						query:{
							type:'my'
						}
					}
				},
				{
					path:'list',
					name:'customList',
					component:CustomList
				},
				{
					path:'handle',
					name:'customHandle',
					component:CustomHandle
				}
			]
			
		},
		{
			name: "system", //路由名称
			path: "/system", //路由路径
			component: System,//路由对应组件
			children:[
				{
					path:'', //这里是设置的默认的路由,刚进来显示哪个组件内容
					redirect:{
						path:'/system/stafflist',
					}
				},
				{
					path:'stafflist',
					// name:'stafflist',
					component:StaffList
				},
				{
					path:'staffhandle',
					// name:'staffhandle',
					component:StaffHandle
				},
				{
					path:'joblist',
					// name:'joblist',
					component:JobList
				},
				{
					path:'jobhandle',
					// name:'jobhandle',
					component:JobHandle
				},
				{
					path:'departmentlist',
					// name:'departmentlist',
					component:DepartmentList
				},
				{
					path:'departmenthandle',
					// name:'departmenthandle',
					component:DepartmentHandle
				}
			],
			//这里是当点击导航看是否有权限查看
			beforeEnter(to, from, next) {
				let power = store.state.power;
				if (/(userhandle|departhandle|jobhandle)/.test(power)) {
					next();
					return;
				}
				Vue.prototype.$alert('您无权限访问此页面,请联系系统管理员!', '系统提示');
			}
		},
		{
			path: '*',
			redirect: '/custom'
		}
		
	]
})


//将路由组件暴露出去
export default router;

vuex状态管理

一张图来了解vuex

diff算法

什么是diff算法?
1,去繁就简
2,vdom为何用diff算法
3,性能高,减少对DOM的频繁操作 4,diff算法的核心流程
5,patch函数,初始时把vnode直接添加到dom选择器里
6,如果oldVnode有值,然后对比oldVnode和newVnode把更新变化的修改生成补丁

vNode如何变成真实的dom节点的