Vue SSR 項(xiàng)目 Nuxt.js 框架之《如何注冊(cè)全局方法擎勘、指令咱揍、過濾器、組件》

# 前言

全局性的東西在項(xiàng)目開發(fā)中是經(jīng)常用到的棚饵,在nuxt中如何定義全局方法煤裙、指令、組件及過濾器的呢噪漾?

# 全局方法

首先在plugins文件下創(chuàng)建一個(gè)mixins.js文件硼砰,用來注冊(cè)全局性的方法及指令等, 內(nèi)容如下:

import Vue from 'vue'

// 定義全局方法
let testFn = () => {
    console.log('我是測(cè)試的全局方法');
}
// 掛載到 vue 原型中
// 注意:服務(wù)端內(nèi)部鉤子不能使用
Vue.prototype.$testFn = testFn ;

配置nuxt.config.js文件

export defult{
    plugins: ['@/plugins/mixins']
}

重啟后,就可以在頁(yè)面里調(diào)用剛剛定義的全局方法了

# 全局過濾器

assetsjs文件夾下創(chuàng)建filters.js文件欣硼,用于聲明我們的全局過濾器题翰,內(nèi)容如下:

// 格式化時(shí)間
export const dateFt = date => {
    if (!date) return 'e';
    const dt = new Date(date);
    let y = dt.getFullYear(),
        m = dt.getMonth() + 1,
        d = dt.getDate(),
        h = dt.getHours(),
        mm = dt.getMinutes(),
        ss = dt.getSeconds();

    m = String(m).padStart(2, '0')
    d = String(d).padStart(2, '0')
    h = String(h).padStart(2, '0')
    mm = String(mm).padStart(2, '0')
    ss = String(ss).padStart(2, '0')

    return y + '-' + m + '-' + d + ' ' + h + ':' + mm + ':' + ss;
}

plugins下的mixins文件里將過濾器注冊(cè)到全局,如下

import Vue from 'vue'

// 定義全局方法
let testFn = () => {
    console.log('我是測(cè)試的全局方法');
};
// 掛載到 vue 原型中
// 注意:服務(wù)端內(nèi)部鉤子不能使用
Vue.prototype.$testFn = testFn;

// 注冊(cè)全局過濾器
// 這里是一次性獲得批量導(dǎo)出的所有對(duì)象方法
import * as filtersList from '@/assets/js/filters'
// 循環(huán)將每個(gè)過濾器注冊(cè)到全局
Object.keys(filtersList).forEach(key => Vue.filter(key, filtersList[key]))

如此就可以在所有的頁(yè)面用全局過濾器了~

# 全局指令

assetsjs文件夾下創(chuàng)建directives.js文件,用于聲明我們的全局過濾器遍愿,內(nèi)容如下:

// 全局指令 1
export const direc1 = {
    // 當(dāng)指令綁定到元素上的時(shí)調(diào)用
    bind(el, binding, vnode) {
        console.log('我是指令1,綁定時(shí)調(diào)用了')
    }
};

// 全局指令 2
export const direc2 = {
    // 元素插入到 DOM 時(shí)調(diào)用
    inserted(el, binding, vnode) {
        console.log('我是指令2耘斩,插入時(shí)調(diào)用了')
    },
    // 組件更新時(shí)調(diào)用
    componentUpdated() {
        console.log('我是指令2沼填,更新時(shí)調(diào)用了')
    }
}

// 指令調(diào)用時(shí)接收的四個(gè)參數(shù)分別是:
// el: 指令所綁定的元素, 可以用來直接操作 DOM括授。
// binding: 一個(gè)對(duì)象坞笙, 包含以下屬性:
//      name: 指令名, 不包括 v - 前綴荚虚。
//      value: 指令的綁定值薛夜, 例如: v - my - directive = "1 + 1" 中, 綁定值為 2版述。
//      oldValue: 指令綁定的前一個(gè)值梯澜, 僅在 update 和 componentUpdated 鉤子中可用。 無論值是否改變都可用渴析。
//      expression: 字符串形式的指令表達(dá)式晚伙。 例如 v - my - directive = "1 + 1"中, 表達(dá)式為 "1 + 1"俭茧。
//      arg: 傳給指令的參數(shù)咆疗, 可選。 例如 v - my - directive: foo 中母债, 參數(shù)為 "foo"午磁。
//      modifiers: 一個(gè)包含修飾符的對(duì)象。 例如: v - my - directive.foo.bar 中毡们, 修飾符對(duì)象為 { foo: true, bar: true }迅皇。
// vnode: Vue 編譯生成的虛擬節(jié)點(diǎn)。衙熔。
// oldVnode: 上一個(gè)虛擬節(jié)點(diǎn)喧半, 僅在 update 和 componentUpdated 鉤子中可用。

plugins下的mixins文件里將指令注冊(cè)到全局青责,如下

import Vue from 'vue'

// 定義全局方法
let testFn = () => {
    console.log('我是測(cè)試的全局方法');
};
// 掛載到 vue 原型中
// 注意:服務(wù)端內(nèi)部鉤子不能使用
Vue.prototype.$testFn = testFn;

// 注冊(cè)全局指令
import * as directivesList from '@/assets/js/directives'
// 循環(huán)將每個(gè)指令注冊(cè)到全局
Object.keys(directivesList).forEach(key => Vue.directive(key, directivesList[key]))

如此就可以在所有的頁(yè)面用全局指令了~

全局組件

components文件夾下創(chuàng)建ts-button.vue測(cè)試全局組件挺据,內(nèi)容如下:

<template>
    <button>全局按鈕</button>
</template>

<script>
    export default {
        name: 'ts-button'
    }
</script>

plugins下的mixins文件里將指令注冊(cè)到全局,如下

import Vue from 'vue'

// 定義全局方法
let testFn = () => {
    console.log('我是測(cè)試的全局方法');
};
// 掛載到 vue 原型中
// 注意:服務(wù)端內(nèi)部鉤子不能使用
Vue.prototype.$testFn = testFn;

// 注冊(cè)全局組件
import TsButton from '@/components/ts-button'
Vue.component('ts-button', TsButton)

如此就可以在所有的頁(yè)面用全局組件了~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末脖隶,一起剝皮案震驚了整個(gè)濱河市扁耐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌产阱,老刑警劉巖婉称,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡王暗,警方通過查閱死者的電腦和手機(jī)悔据,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來俗壹,“玉大人科汗,你說我怎么就攤上這事”脸” “怎么了头滔?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)涎显。 經(jīng)常有香客問我坤检,道長(zhǎng),這世上最難降的妖魔是什么期吓? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任早歇,我火速辦了婚禮,結(jié)果婚禮上讨勤,老公的妹妹穿的比我還像新娘缺前。我一直安慰自己,他們只是感情好悬襟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布衅码。 她就那樣靜靜地躺著,像睡著了一般脊岳。 火紅的嫁衣襯著肌膚如雪逝段。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天割捅,我揣著相機(jī)與錄音奶躯,去河邊找鬼。 笑死亿驾,一個(gè)胖子當(dāng)著我的面吹牛嘹黔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播莫瞬,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼儡蔓,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了疼邀?” 一聲冷哼從身側(cè)響起喂江,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎旁振,沒想到半個(gè)月后获询,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涨岁,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年吉嚣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了梢薪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡尝哆,死狀恐怖秉撇,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情较解,我是刑警寧澤畜疾,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布赴邻,位于F島的核電站印衔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏姥敛。R本人自食惡果不足惜奸焙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望彤敛。 院中可真熱鬧与帆,春花似錦、人聲如沸墨榄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)袄秩。三九已至阵翎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間之剧,已是汗流浹背郭卫。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留背稼,地道東北人贰军。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蟹肘,于是被迫代替她去往敵國(guó)和親词疼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容