VUE directives与mixins

396 阅读3分钟

1.用directives创造自定义指令

除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令。

一个指令定义对象可以提供如下几个钩子函数 (均为可选):

bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。
update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。
componentUpdated:指令所在组件的 VNode 及其子 VNode 全部更新后调用。
unbind:只调用一次,指令与元素解绑时调用。

这里我们仿写一个v-on功能的指令

bind的第一个参数el为指令所绑定的元素,可以中hi接操作DOM,第二个参数info可以取到元素里的各个属性 这样,新的指令v-on2就创建成功了

该写法为声明一个局部指令的写法,另一种是声明一个全局指令的写法

Vue.directive('x', directiveOptions)

这样写的话就可以在任何组件里用v-x 了

指令的作用主要是用于DOM操作,虽然VUE有提供一些现成的指令,但是在开发的过程中难免会遇到操作DOM的需求,而此时如果VUE没有提供指令,就可以自己封装,在遇到某个DOM频繁操作时,也可以达到减少重复的目的。

2.mixins混入

ue中提供了一种混合机制--mixins,用来更高效的实现组件内容的复用。混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项中。

简单的说,组件在引用之后就相当于在父组件内开辟了一块单独的空间,然后根据父组件props过来的值进行相应的操作。而使用mixins机制的组件则是在引入组件之后,则是将组件内部的内容如data等方法、method等属性与父组件相应内容进行合并,然后再执行渲染。即

单纯组件引用

父组件 + 子组件 >>> 父组件 + 子组件

mixins组件

父组件 + 子组件 >>> new父组件

同时,使用mixins机制的组件,多个组件之间可以共享数据和方法,在使用mixin的组件中引入后,mixin中的方法和属性也就并入到该组件中,可以直接使用。如果项目中有使用vue-router,那么组件将自动使用mixins机制。

下面是mixin的一个使用示例: 1,定义一个 js 文件(mixin.js):

export default {
 data() {
  return {
   name: 'mixin'
  }
 },
 created() {
  console.log('mixin...', this.name);
 },
 mounted() {},
 methods: {}
}

2,然后在vue文件中使用mixin。

import '@/mixin'; // 引入mixin文件
export default {
 mixins: [mixin]
}