他們都是成對使用的,不能亂用:
vue
(1)module.exports 和 exports對應的是require:是屬於CommonJS模塊規範。node
// 在fun.js 寫入
const arr = [1, 2, 3]
module.exports = {
arr
}複製代碼
能夠批量導出, fun.js若是有多個module.exports, 只有最後一個生效。若是有其餘的exports, 它們都不會生效
ios
// 在fun.js 寫入
exports.arr = [1, 2, 3] 複製代碼
單個導出,fun.js能夠有多個exports
npm
let { arr } = require('./fun') // [1, 2, 3]
let obj = require('./fun') // { arr: [1, 2, 3] }
複製代碼
(2)export 和 export default,對應的是import:是屬於ES6語法
element-ui
// 在fun.js 寫入
export let arr = [1, 2, 3]
export let obj = { name: '123' }
// 頁面引用
import {arr, obj } from './fun'複製代碼
// 在fun.js 寫入
export let arr = [1, 2, 3]
export let obj = { name: '123' }
export default {
age: 12
}
// 頁面引用
import {arr, obj } from './fun' // [1, 2, 3], { name: '123' }
import myObj from './test1' // { age: 12}複製代碼
(1)使用Vue.prototype
axios
// 在main.js中寫
Vue.prototype.getData = (params) => {
...
}複製代碼
(2)使用install + Vue.prototype
bash
// 在你的全局函數文件fun.js中寫
export default {
install (Vue) {
Vue.prototype.getData = () => {
return { name: 'scout'}
}
}
}
// main.js 引入
import getData from './fun'
Vue.use(getData) 複製代碼
Vue.use 會自動阻止屢次註冊相同插件,屆時即便屢次調用也只會註冊一次該插件。以上兩種方式註冊全局方法,實現的原理都是在 Vue.prototype 上添加了一個方法。在任何vue組件裏都能使用 this.getData() // { name: 'scout'}
函數
何時該使用Vue.use()方式,何時能夠直接掛在prototype上呢,那你就要知道Vue.use() 到底幹了什麼?
Vue規定引入的插件必須是對象或者函數。ui
// 公共vue組件: components文件夾下面的Loading.vue文件:
import LoadingComponent from '@/components/Loading'
export default {
install (Vue) {
Vue.component('Loading', LoadingComponent)
}
}
// 全局組件: public文件夾下面的Loading.js文件。在main.js中引入:
import Loading from "@/public/Loading"
Vue.use(Loading)
// 在vue任何組件上均可以直接使用:<Loading />複製代碼
自定義指令、添加全局方法等 均可以採用此種方式比較方便
// 在public文件夾下的filter.js文件中:
export const isEmpty = (value) => {
return value || '-'
}
//在main.js中註冊
import * as filters from './filters'
Object.keys(filters).forEach(key => {
Vue.filter(key, filters[key])
})
// 在任何組件中均可以使用此過濾器:| 符號左側的是傳參
<template>
<div>
<span>{{message | isEmpty}}</span>
</div>
</template>複製代碼
自定義指令爲咱們提供了幾個鉤子函數(均爲可選項):
this
我這裏以inserted爲例,添加一個全局的表格拖拽的自定義指令 v-tableDrag 。此處使用了sortablejs這個函數庫(ps: 這個包的使用方法能夠去npm查看,這裏不作贅述。不用關注這個,主要是看如何進行指令的註冊)。
// 這是directive文件夾下面的 tableDrag.js文件:
import Sortable from 'sortablejs'
export default {
install (Vue) {
Vue.directive('tableDrop', {
inserted (el, binding, vnode) {
let { value } = binding
let column = el.querySelector('.ivu-table-header thead tr')
Sortable.create(column, {
animation: 200,
filter: `.ivu-table-header thead tr th:nth-child(${column.childElementCount})`,
onMove (e) {
if (e.related.innerText === column.children[`${column.childElementCount - 1}`].innerText) {
return false
}
},
onEnd (e) {
// 列表數據的改變
let { item, oldIndex, newIndex } = e
let oldItem = value[oldIndex]
value.splice(oldIndex, 1)
value.splice(newIndex, 0, oldItem)
// 表頭的改變
let fatherNode = item.parentElement
let flag = fatherNode.children[newIndex]
fatherNode.removeChild(flag)
fatherNode.insertBefore(flag, fatherNode.children[oldIndex])
}
})
}
})
}
}複製代碼
註冊完後使用:
//在main.js中引入
import tableDrag from '@/directive/tableDrag'
Vue.use(tableDrag)
// 任何組件中均可以使用指令: v-tableDrag 這個指令實現了表格的行,列,均可以進行拖拽複製代碼
其實鉤子函數中經常使用的參數就這三個(詳細參數查看下圖):