Vue定义全局变量和全局组件的几种方式

1.Vue.prototype

Vue.prototype.$axios = axios    
//this.$axios

2.Vue.use()

//在使用 element时会先import,再Vue.use()一下,实际上就是注册组件,触发 install 方法;
Vue.use(Element)
window.$ = require("jquery")   //挂载在window上

3.Vue.directive()

//防止按钮重复点击,全局使用 v-preventClick
Vue.directive('preventClick', {
    
    
    inserted (el, binding) {
    
    
        el.addEventListener('click', () => {
    
    
           if (!el.disabled) {
    
    
               el.disabled = true
               setTimeout(() => {
    
    
                  el.disabled = false
               }, 3000)
            }
        })
    }
})

4.Vue.component()

全局组件是在普通组件的基础上,将普通组件创建至DOM即可

//dragResize.js
import VueDragResize from 'vue-drag-resize'
export default {
    
    
  install() {
    
    
    Vue.component("VueDragResize",VueDragResize)
  }
};
//main.js
import VueDragResize from './utils/dragResize.js'
Vue.use(VueDragResize) 


//需要导入多个组件
const requireComponent = require.context('./components', false, /\.(vue|js)$/)
requireComponent.keys().forEach((fileName) => {
    
    
  // 获取组件配置
  const componentConfig = requireComponent(fileName)
  const componentName = fileName.split('/').pop().split(".")[0]
  // 全局注册组件
  Vue.component(componentName, componentConfig.default)
})
//说明
require.context(directory,useSubdirectories,regExp)
接收三个参数:
directory:说明需要检索的目录
useSubdirectories:是否检索子目录
regExp: 匹配文件的正则表达式,一般是文件名

5.Vue.extend()

vue 组件中有些需要将一些元素挂载到元素上,这个时候 extend 就起到作用了
用Vue.extend()构造出一个Vue子类实例,然后调用mount( ) 方法生成需要的DOM,再拿到对应的el实例,插入到DOM中

import Vue from 'vue'
const toastMessage = Vue.extend({
    
    
  template: '<div>{
    
    { text }}</div>',
  data: function () {
    
    
    return {
    
    
      text: '发信息来啦'
    }
  }
})
const message = new toastMessage().$mount()
document.body.appendChild(message.$el)

6.Vue.filter()

差值表达式里的值从左向右传递,前面的值会以参数的形式传递给后面,它们之间以管道符分割

<div id="app">
    <p>{
   
   {price | addPriceIcon | editPrice}}</p>
</div>
 let vm = new Vue({
    
    
    el:"#app",
    data:{
    
    
        price:200
    },
    filters:{
    
    
        addPriceIcon(value){
    
    
            return '¥' + value
        },
        editPrice(value){
    
    
          console.log(value)
          return "吃饭:" + value
        }
    }
 })

如何区别使用?

相信很多人在用Vue使用别人的组件时,会用到 Vue.use() 。例如:Vue.use(VueRouter)、Vue.use(MintUI)。但是用 axios时,就不需要用 Vue.use(axios),就能直接使用。那这是为什么呐?
因为 axios 没有 使用install方法

export default {
    
    
  install(Vue) {
    
    
    Vue.prototype.$get = (url, params = {
    
    }) => {
    
    
      return new Promise((resolve, reject) => {
    
    
        axios.get(url, params)
          .then(response => resolve(response.data))
          .catch(error => reject(error))
      })
    }
    Vue.prototype.$post = (url, params = {
    
    }) => {
    
    
      return new Promise((resolve, reject) => {
    
    
        axios.post(url, params)
          .then(response => resolve(response.data))
          .catch(error => reject(error))
      })
    }
  }
}

猜你喜欢

转载自blog.csdn.net/m0_48076809/article/details/108412247