vue作为数据驱动型框架,通过组件实现html代码的复用。对其核心知识的掌握有利于更好的编写vue项目和对框架的理解和认知。
1、插槽
插槽是为了组件更好的复用,可以传节点。在组件的templent里面放
<slot></slot>标签定义了一个插槽,在使用组件的时候直接传文本或节点信息就会渲染到插槽的位置。一般使用时用<template>标签包起来,当有多个插槽的时候使用<slot name='xxx'></slot>,使用<template v-slot:xxx></template>。需要接收 prop 的插槽。声明时<slot name='xxx' :scrop='xxx'></slot>使用<template v-slot:xxx='scrop'></template>
2、mixins
mixins混入,复用业务逻辑。声明:mixins = {},相当于组件的配置项.使用:在组件中通过mixins: [mixins],配置项引入。vue会自动把相同的配置信息合并。
3、vuex
vuex是状态管理仓库,存储公共数据的地方。有以下5个内容。
state:单一状态树,就是一个对象,用来存放数据的地方。
getters:从state 中派生出一些状态。
mutations:更改state状态必须提交mutation,只能同步代码。
actions:Action 提交的是 mutation,而不是直接变更状态。可以是异步操作。
modules:将 store 分割成模块,一个模块就是一个js文件,都包含state、getters、mutations、actions
注:vuex的缺陷,当页面刷新的时候state里面的数据会重置,造成数据丢失,可以通过存储到storage里面解决,一般会使用vuex的插件vuex-persistedstate。
4、路由传参的方式
- 查询字符串
query,在url上?key=value&key=value;- 动态路由,通过
this.$route.params获取;eventBus,通过vue.prototype.$bus = new vue绑定事件和触发事件的实例相同,通过$on绑定事件,$off移除事件,$emit触发事件;storage和vuex;- 配置
meta元信息。
5、组件传参的方式
- 父组件传子组件
props,子组件传父组件$emit('自定义事件',params);- 直接访问,通过
$root,$parent,$children,$refs.xxx(组件添加ref='xxx'属性);eventBus,通过vue.prototype.$bus = new vue绑定事件和触发事件的实例相同,通过$on绑定事件,$off移除事件,$emit触发事件;- 依赖注入,provide和inject;
storage和vuex;
6、vue的常用指令
v-for遍历节点v-if创建/销毁节点v-show显示/隐藏节点v-bind把变量赋值给属性,简写:v-on绑定事件,简写@v-model表单数据的双向绑定v-once只渲染元素和组件一次v-html更新元素的innerHTMLv-slot提供具名插槽或需要接收prop的插槽v-else为v-if提供else模块v-else-if为v-if提供多选模块
7、vue常用的指令修饰符
lazy把输入框的input事件改为change事件trim去掉空格number转换为数字,同parseFloat()函数效果stop阻止冒泡sync父子组件传值,子组件更新数据once事件只执行一次self只有事件绑定的本身才触发事件prevent阻止默认事件passive减少onscroll事件触发频率leftrightmiddle鼠标的按键
8、v-if和v-show的区别
v-if是通过创建/销毁节点的方式显示隐藏节点,v-show通过css的display:none;来隐藏节点。v-if有更高的切换性能消耗,v-show有更高的初始化性能消耗,且不能和template共用。
9、页面跳转的方式
- 模板导航,
<router-link>标签的to="url";- js跳转,
this.$router.push()、this.$router.replace()、this.$router.go(),replace()不会产生历史记录,一般用于登录页验证后跳转。
10、$route和$router的区别
$route是路由实例,可以获取当前页面的参数name、path、params、query等信息;$router是全局路由对象,提供路由跳转的方法。
知识总结,多多益善,经常回顾,温故而知新。