vue2.x利用Vue.prototype注册全局组件/方法

简介: vue2.x利用Vue.prototype注册全局组件/方法

vue2.x利用Vue.prototype注册全局方法/变量/组件


有些时候我们需要在vue项目的任意位置都能调用公共方法/变量,那么vue如何注册全局的方法/变量/组件呢?请看以下示例:

  1. 创建common.js(编写插件),插件内利用Vue.prototype全局挂载方法
import { Toast } from 'vant';
import echarts from 'echarts';
const install = (Vue) => {
  // toast提示,通过this.Toast调用
  Vue.prototype.Toast = Toast;
  // echarts,通过this.$echarts调用
  Vue.prototype.$echarts = echarts;
  // 获取url参数
  Vue.prototype.$getUrlParam = (name, href) => {
    const _search = href ? href.split('?')[1] : window.location.search.substr(1);
    if (_search) {
      const _reg = new RegExp(`(^|&)${name}=([^&]*)(&|$)`, 'i');
      const _regNext = _search.match(_reg);
      if (_regNext) {
        return decodeURI(_regNext[2]) || '';
      }
      return '';
    }
    return '';
  };
  1. main.js(通过Vue.use注册刚刚编写的自定义插件),关于Vue.use的介绍,可以参考Vue.use的使用和基本原理
import Vue from 'vue';
import App from './App';
import router from './router';
import store from './store';
// 引入自定义插件
import common from './lib/common';
Vue.use(common); // 全局配置项
/* eslint-disable no-new */
// 把vue实例挂载在window.vm,方便使用vue的实例
window.vm = new Vue({
  el: '#app',
  router,
  store,
  components: {
    App,
  },
  template: '<App/>',
});
  1. 在任意组件中使用刚刚通过Vue.prototype全局注册的方法,比如使用$getUrlParam方法,直接通过this.$getUrlParam即可调用
<template>
  <div class="page">
  Vue.prototype全局注册的方法测试
  </div>
</template>
<script>
export default {
  name: 'Test',
  data() {},
  created() {
    console.log(this.$getUrlParam('idCard'))
  },
};
</script>
  1. 在任意js文件中使用刚刚通过Vue.prototype全局注册的方法,比如使用$getUrlParam方法。因为我们已经在main.js中将vue实例挂载在window.vm,所以在js文件中,直接通过window.vm.$getUrlParam即可调用
console.log(window.vm.$getUrlParam('idCard'))

当然,如果不想通过编写组件然后Vue.use的方式引入全局方法,也可以直接在main.js通过Vue.prototype注册全局方法/变量/组件。

mian.js:

import Vue from 'vue';
import App from './App';
import router from './router';
import store from './store';
  
// 通过Vue.prototype注册全局方法/变量/组件
// toast提示,通过this.Toast调用
Vue.prototype.Toast = Toast;
// echarts,通过this.$echarts调用
Vue.prototype.$echarts = echarts;
// 获取url参数
Vue.prototype.$getUrlParam = (name, href) => {
  const _search = href ? href.split('?')[1] : window.location.search.substr(1);
  if (_search) {
    const _reg = new RegExp(`(^|&)${name}=([^&]*)(&|$)`, 'i');
    const _regNext = _search.match(_reg);
    if (_regNext) {
      return decodeURI(_regNext[2]) || '';
    }
    return '';
  }
  return '';
};
  
// 把vue实例挂载在window.vm,方便使用vue的实例
window.vm = new Vue({
  el: '#app',
  router,
  store,
  components: {
  App,
  },
  template: '<App/>',
});

需要注意的是,只有vue2.x支持Vue.prototype注册全局方法/变量/组件,vue3.x不再支持Vue.prototype

目录
相关文章
|
4月前
|
存储 JavaScript
第26节: Vue3 绑定到对象
第26节: Vue3 绑定到对象
19 0
|
4月前
|
JavaScript
VUE组件:Vue组件中的data为什么必须是一个函数而不是一个对象?
VUE组件:Vue组件中的data为什么必须是一个函数而不是一个对象?
31 2
|
1月前
|
JavaScript
Vue动态添加新的属性到实例上(vue的问题)
Vue动态添加新的属性到实例上(vue的问题)
|
7月前
|
JavaScript
07Vue - Vue实例(属性与方法)
07Vue - Vue实例(属性与方法)
23 0
|
7月前
|
JavaScript 编译器
50Vue - 组件的使用(全局注册)
50Vue - 组件的使用(全局注册)
43 0
|
6月前
Vue3.0实现todolist-Vue3.0定义状态管理
Vue3.0实现todolist-Vue3.0定义状态管理
17 1
|
10月前
|
JavaScript
vue如何引用组件
vue如何引用组件
|
10月前
|
存储 JavaScript 前端开发
Vue组件方法
在非 new Vue 的组件(局部组件)中,data 必须为函数,函数返回值必须是一个对象,作为组件的最终 data (为避免共用同一个对象) 为什么局部组件data必须为函数,且返回值必须是一个对象?
64 0
|
11月前
|
JavaScript API
Vue3 全局注册
Vue3 全局注册
108 0
|
JavaScript 前端开发
Vue 使用Use、prototype自定义全局插件
Vue 使用Use、prototype自定义全局插件
181 0