Vue.directive、Vue.prototype、Vue.mixin、Vue.use使用示例

本文详细介绍了Vue.js中的Vue.directive全局指令注册、Vue.prototype全局方法注册、Vue.mixin全局混入以及Vue.use插件管理。重点讲解了各种方法的工作原理和生命周期钩子函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这一期 回顾并巩固一下一般不会怎么用到,刚开始学的是也迷迷糊糊的Vue.directive、Vue.prototype、Vue.mixin、Vue.use,这些方法的使用。

  • Vue.directive 全局注册指令

注册:

Vue.directive('has',{
    bind() {
      // 只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。
      console.log('bind 调用一次')
    },
    inserted(el,binding,vnode,oldvnode) { //通常用这个就够了
      // 被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。
      console.log('inserted 绑定后执行的逻辑')
    },
    updated() {
      // 所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。
      console.log('updated 项目数据更新时')
    },
    componentUpdated() {
      // 指令所在组件的vnode及其子vnode全部更新后调用
      console.log('componentUpdated')
    },
    unbind() {
      // 只调用一次,指令与元素解绑时调用
      console.log('unbind ')
    }
  })


//每个方法中都有4个参数就不一一填写了,分别是el,binding,vnode,oldvnode

官方介绍
Vue.directive的官方概念

1、vue.directive 有两个参数:id(string)和[definition](function|object)

2、vue.directive有5种钩子函数,分别是:bind, inserted ,update, componentUpdated, unbind

    2.1、bind:只调用一次,指令第一次绑定到元素时调用,在这里可以进行一次性的初始化设置

    2.2、inserted:被绑定元素插入父节点时调用(仅保证父节点存在,但不一定被插入文档中)

    2.3、update:所在组件的vnode更新时调用,但是可能发生在其子vnode更新之前,指令的值可能发生了            
    变化,也可能没有

    2.4、componentUpdate:指令所在组件的vnode及其子vnode全部更新后调用

    2.5、unbind:只调用一次,指令与元素解绑时调用

3、钩子函数参数
    el,binding(name,value,oldValue,expression,arg,modifiers),vnode,oldvnode

4、动态指令参数

指令的参数可以是动态的,例如,v-myDirective:[argument]="value"中,argument参数可以根据组件实例数据进行更新 

 5、对象字面量

指令需要多个值,可以传入一个js对象字面量,指令函数接受所有合法的js表达式

使用:

<span v-has="data"></span>
  • Vue.prototype.fn 全局注册方法

1,在main.js文件中注册

//$formatDate方法名称  main.js文件
Vue.prototype.$formatDate = function(date) {
  const options = { year: 'numeric', month: 'long', day: 'numeric' };
  return new Intl.DateTimeFormat('en-US', options).format(new Date(date));
};

2,使用实例: 

//使用方法
//1,模板
<template>
    <div>
        {{$formatDate(new Date())}}
    </div>
</template>

//2,script
  mounted() {
    const formattedDate = this.$formatDate(new Date());
    console.log(formattedDate); // 输出格式化的日期
  }

补充一点,可以不写$符号,写$符号只是为了以免本地组件的 方法名冲突。

  • Vue.mixin 全局混入

第一种写法:

// 第一种写法
//创建一个单独的 mixis文件
export const mixins = {
  data() {
    return {
      msg: "我是Mixin中的msg",
    };
  },
  computed: {},
  created() {
    console.log("我是Mixin中的created生命周期函数");
  },
  mounted() {
    console.log("我是Mixin中的mounted生命周期函数");
  },
  methods: {
    clickMiXin() {
      console.log("我是Mixin中的点击事件");
    },
  },
};

//main.js
import Vue from 'vue'
import App from './App.vue'
import ElementUI from 'element-ui';
import { mixins } from "@/mixin/index";
 
Vue.config.productionTip = false
Vue.mixin(mixins);
 
new Vue({
  render: h => h(App)
}).$mount("#app")

第二种方法:

///////////////////////////////////////////////////////////////////////
//第二种写法,直接在main.js文件中写  *如果较多的话,不推荐这么写,整理起来麻烦
Vue.mixin({
  created: function () {
      console.log("全局混入")
    },
  methods: {
    clickMiXin() {
      console.log("我是Mixin中的点击事件");
    },
  },
})

 

  • Vue.use()

Vue.use()是什么通过全局方法 Vue.use() 使用插件,Vue.use 会自动阻止多次注册相同插件,它需要在你调用 new Vue() 启动应用之前完成,Vue.use() 方法至少传入一个参数,该参数类型必须是 Object 或 Function。

如果是 Object 那么这个 Object 需要定义一个 install 方法;如果是 Function 那么这个函数就被当做 install 方法。在 Vue.use() 执行时 install 会默认执行,当 install 执行时第一个参数就是 Vue,其他参数是 Vue.use() 执行时传入的其他参数。就是说使用它之后调用的是该组件的install 方法。

简单例子:

const plugin = {
  install() {
    alert("alert弹窗提示")
  },
}
 
// main.js中引入自定义插件
Vue.use(plugin) // 页面显示"alert弹窗提示"

更深入一点例子:

1,定一个组件

<template>
  <div class="loading-box"> 
    Laoding...
  </div>
</template>

2,创建一个index.js,引入刚刚定义的组件,并设置install方法

// 引入组件
import LoadingComponent from './loading.vue'
// 定义 Loading 对象
const Loading={
    // install 是默认的方法。当外界在 use 这个组件的时候,就会调用本身的 install 方法,同时传一个 Vue 这个类的参数。
  install:function(Vue){
    Vue.component('Loading',LoadingComponent)
  }
}
// 导出
export default Loading

3,在main.js中使用

在 main.js 中引入 上面定义的 index.js,通过Vue.use()方法将Loading注册为Vue的插件

// 其中'./components/loading/index' 的 /index 可以不写,webpack会自动找到并加载 index 。如果是其他的名字就需要写上。
import Loading from './components/loading/index'
// 这时需要 use(Loading),如果不写 Vue.use()的话,浏览器会报错,大家可以试一下
Vue.use(Loading)


/////////////////////扩充一点/////////////////////////
//如果不使用,上面2的写法,直接在main.js文件中写 也可以,主要的目的就是让他拥有install方法
//示例:
import Loading from './components/loading/index'
Loading.install = function(Vue){
 Vue.component('Loading',LoadingComponent)
}
Vue.use(Loading)

4,使用组件

<template>
  <div id="app">
    <h1>vue-loading</h1>
    <Loading></Loading>  <!-- 组件也可以单标记<Loading/> -->
  </div>
</template>

 //////////////以上说的都是对象方法,需要提供install函数形式,下面列举一个本身就是函数类型的。

1,创建函数

function demo(Vue){
  console.log(Vue)
}
export default demo

2,引入并且use

import demo from './utils/func'
Vue.use(demo) 

好了,今天就先分享到这里吧,等着再有一些时间,或者大部分会踩坑、基础知识模糊的问题,我还会继续分享出来的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值