一、自定义指令

1.1 全局指令

  1. Vue.directive('指令名', directiveOptions)

1.2 局部指令

  1. new Vue({
  2. ...,
  3. directives: {
  4. '指令名': directiveOptions
  5. }
  6. })

1.3 directiveOptions的属性

  • bind(el, info, vnode, oldVnode) —— 类似于 created
  • inserted(el, info, vnode, oldVnode) —— 类似于 mounted
  • update(el, info, vnode, oldVnode) —— 类似于 updated
  • componentUpdated(el, info, vnode, oldVnode) —— 基本上用不到
  • unbind(el, info, vnode, oldVnode) —— 类似于 destroyed

1.4 使用方式

  1. <div v-指令名="参数"></div>

1.5 代码示例,模拟v-on

  1. new Vue({
  2. directives:
  3. 'on2': {
  4. inserted(el, info){
  5. el.addEventListener(info.arg, info.value)
  6. },
  7. unbind(el, info){
  8. el.removeEventListener(info.arg, info.value)
  9. }
  10. }
  11. },
  12. methods: {
  13. fn(){
  14. console.log('测试')
  15. }
  16. }
  17. })
  1. <div v-on2:click="fn">我是假的v-on</div>

1.6 函数简写

如果 bindupdate 的内容一致时,并不关心其他钩子,可以使用此简写。

  1. Vue.directive('color-swatch', (el, binding)=>{
  2. el.style.backgroundColor = binging.value
  3. })

二、Mixin混入

需要混入的内容 mixins/test.js

  1. data(){
  2. return {
  3. msg: '我是测试的内容'
  4. }
  5. },
  6. methods: {
  7. onSay(){
  8. console.log(this.msg)
  9. }
  10. },
  11. created() {
  12. console.log('我是测试的生面周期钩子')
  13. }

需要混入的文件 Demo.vue

  1. import test from '../mixins/test.js'
  2. new Vue({
  3. mixins: [test]
  4. })

混入说白了就是复制粘贴

三、Extends继承、拓展

需要继承的文件 DemoVue.js

  1. import Vue from 'vue'
  2. import test from '../mixins/test.js'
  3. const DemoVue = Vue.extend({
  4. mixins: [test]
  5. })

需要使用该继承的地方

  1. import DemoVue from '../DemoVue.js'
  2. new Vue({
  3. extends: DemoVue
  4. })

或者

  1. new DemoVue({
  2. 构造选项
  3. })

四、Provide & Inject

使用 provide 将属性暴露出去

Demo1.vue

  1. new Vue({
  2. data(){
  3. return {
  4. color: 'red'
  5. }
  6. },
  7. methods: {
  8. changeColor(){
  9. this.color = 'blue'
  10. }
  11. },
  12. project(){
  13. return {
  14. color: this.color,
  15. changeColor: this.changeColor
  16. }
  17. }
  18. })

其他组件就可以使用 inject 获取暴露出来的值

  1. new Vue({
  2. inject: ['color', 'changeColor'],
  3. methods: {
  4. showColor(){
  5. console.log(this.color)
  6. this.changeColor()
  7. console.log(this.color)
  8. }
  9. }
  10. })