国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

手把手教你在 Vue3 中自定義插件

開發
最近在錄 TienChin 項目,項目涉及到了 Vue 中插件的定義,因此整了這么一篇文章,手把手教大家在 Vue3 中定義插件,這個技能掌握了,就可以看懂 TienChin 前端代碼了。

最近在錄 TienChin 項目,項目涉及到了 Vue 中插件的定義,因此整了這么一篇文章,手把手教大家在 Vue3 中定義插件,這個技能掌握了,就可以看懂 TienChin 前端代碼了。

1. Vue 插件

在 Vue 中,一些簡單的功能,我們可以直接定義為全局方法,然后掛到 Vue 上就能使用了,例如在 vhr 中,我們將網絡請求方法進行封裝,然后掛到了 Vue.prototype 上就可以了,類似下面這樣:

import {postRequest} from "./utils/api";

Vue.prototype.postRequest = postRequest;

然后在使用的地方,就可以通過 this.postRequest 去使用了。

小伙伴們需要注意,這個在 Vue3 中有所變化,prototype 變為了 config.globalProperties,也就是在 Vue3 中再想要掛載全局方法,應該是 const app = createApp(App);app.config.globalProperties.useDict = useDict 這種形式了(具體我將在 TienChin 項目中和大家細聊)。

這也算是一種插件定義方式,但是這種一般適用于一些工具方法,無法定義一些比較復雜的插件,復雜的插件還是得通過 Vue 中提供的插件定義方式來定義。

2. 自定義插件

2.1 基本用法

首先我們新建一個目錄 plugins 專門用來放我們的插件,然后在這個目錄中新建一個 index.js 文件用來開發插件,內容如下:

export default {
install: (app, options) => {
console.log("我的第一個插件")
}
};

install 中的方法將會被自動執行。

接下來我們就可以在 main.js 中引入我們這個插件了:

const app = createApp(App);

import plugin from './plugins'

app.use(plugin);

app.use 就表示引入插件,引入插件之后,插件中的 install 方法就會被自動執行。

app.use 方法接收兩個參數,第一個參數就是我們導入的插件 js 對象,第二個參數是可選的,大家看到插件定義時候的 install 方法有兩個參數,第一個參數是 Vue 實例,這是自動傳入的,第二個參數 options 則是我們在 app.use 中,通過第二個參數傳入進來的。當然上面這個例子中松哥沒有傳遞第二個參數。

好了,如此配置之后,接下來啟動項目,控制臺就可以看到有日志打出了。

圖片

這樣的插件未免過于簡單,接下來我們就給這個插件加點料。

2.2 加入組件

首先我們定義一個新的組件,如下:

<template>
<div>
<h1><a href="http://www.javaboy.org">javaboy</a></h1>
</div>
</template>

<script>
export default {
name: "MyBanner"
}
</script>

然后我們現在就可以在插件中將這個組件注冊為一個全局組件了,如下:

import MyBanner from "@/plugins/components/MyBanner";

export default {
install: (app, options) => {
console.log("我的第一個插件")
app.component('my-banner', MyBanner);
}
};

首先在插件中導入這個組件,然后通過 app 進行組件注冊,注冊完成后,我們就可以在項目任意位置使用 my-banner 組件了,如下:

<template>
<div>
<my-banner></my-banner>
</div>
</template>

最終顯示效果如下:

圖片圖片

2.3 加入指令

我們甚至還可以在插件中注冊一個指令,如下:

import MyBanner from "@/plugins/components/MyBanner";

export default {
install: (app, options) => {
console.log("我的第一個插件")
app.component('my-banner', MyBanner);
app.directive("font-size", (el, binding, vnode) => {
var size = 16;
switch (binding.arg) {
case "small":
size = 16;
break;
case "large":
size = 32;
break;
default:
size = 48;
break;
}
el.style.fontSize = size + "px";
});
}
};

現在,我們就可以在項目中隨時隨地去使用這個指令了,例如在我們剛剛自定義的 my-banner 中使用這個指令:

<template>
<div>
<h1><a href="http://www.javaboy.org" v-font-size:small>javaboy</a></h1>
</div>
</template>

<script>
export default {
name: "MyBanner"
}
</script>

我們甚至可以通過 options 將指令中字體的大小動態的傳進來,如下:

import MyBanner from "@/plugins/components/MyBanner";

export default {
install: (app, options) => {
console.log("我的第一個插件")
app.component('my-banner', MyBanner);
app.directive("font-size", (el, binding, vnode) => {
var size = 16;
switch (binding.arg) {
case "small":
size = options.small;
break;
case "large":
size = options.large;
break;
default:
size = options.defaut;
break;
}
el.style.fontSize = size + "px";
});
}
};

options 是插件注冊時候傳入的一個 JSON 參數,small、large 以及 default 分別對應的字體多大,要看插件注冊時傳入的值:

const app = createApp(App);

import plugin from './plugins'

app.use(plugin, {small: 16, large: 32, default: 48});

第二個參數,大家看,就是 options 參數的值。

現在大家想想我們平時用 ElementUI 的時候,Vue.use 方法,傳入 ElementUI,再傳入一些其他參數,看了上面這個例子,ElementUI 引入到底是怎么個引入法現在大家就明白了吧。

2.4 provide & inject

在插件中,也可以通過 provide 來提供一個方法,在需要使用該方法的地方,通過 inject 注入方法,然后就可以使用了,如下:

import MyBanner from "@/plugins/components/MyBanner";

export default {
install: (app, options) => {
console.log("我的第一個插件")
app.component('my-banner', MyBanner);
app.directive("font-size", (el, binding, vnode) => {
var size = 16;
switch (binding.arg) {
case "small":
size = options.small;
break;
case "large":
size = options.large;
break;
default:
size = options.defaut;
break;
}
el.style.fontSize = size + "px";
});
const clickMe = () => {
console.log("==========clickMe=========")
}
app.provide('clickMe', clickMe);
}
};

在需要使用的地方,通過 inject 注入方法后就可以使用了,如下:

<template>
<div>
<h1><a href="http://www.javaboy.org" v-font-size:small>javaboy</a></h1>
</div>
</template>

<script>

import {inject} from "vue";

export default {
name: "MyBanner",
mounted() {
const clickMe = inject('clickMe');
clickMe();
}
}
</script>

3. 小結

整體上來說,通過這種方式來自定義插件,能夠實現的內容比較豐富。如果只是想掛一個全局方法來用,那么其實是沒有必要定義插件的。如果只是想掛載一個全局方法,在 Vue2 中可以按照如下方式使用:

Vue.prototype.postRequest = postRequest;

在 Vue3 中則可以通過如下方式:

app.config.globalProperties.useDict = useDict
責任編輯:趙寧寧 來源: 江南一點雨
相關推薦

2022-07-26 01:06:18

Vue3自定義指令

2022-05-11 10:45:21

SpringMVC框架Map

2021-02-26 11:54:38

MyBatis 插件接口

2024-04-02 08:58:13

2024-03-05 18:27:43

2011-04-28 15:09:15

jQueryjqPlot

2022-03-24 15:28:43

Vue開發框架

2023-07-30 15:11:03

Vue3第三方組件庫

2021-11-30 08:19:43

Vue3 插件Vue應用

2009-06-02 15:38:36

eclipse streclipse開發steclipse str

2023-05-29 09:37:17

Vue3Vite

2011-01-10 14:41:26

2011-05-03 15:59:00

黑盒打印機

2025-05-07 00:31:30

2021-07-14 09:00:00

JavaFX開發應用

2020-06-01 16:25:43

WindowsLinux命令

2011-03-28 16:14:38

jQuery

2024-03-18 18:07:38

VSCode插件文件

2011-02-22 13:46:27

微軟SQL.NET

2021-12-28 08:38:26

Linux 中斷喚醒系統Linux 系統
點贊
收藏

51CTO技術棧公眾號

亚洲一区高清| 91女主播在线观看| 999精品一区| 精品av中文字幕在线毛片 | 91tv精品福利国产在线观看| 亚洲精品乱码久久久久久按摩观| jizz欧美性11| 9999精品| 欧美三级韩国三级日本一级| 欧美婷婷精品激情| 欧美另类专区| 国产精品成人免费在线| 国产免费人做人爱午夜视频| 久久这里只有精品首页| 日韩一区二区在线看| 亚洲天堂第一区| 免费黄色在线| 国产又黄又大久久| 亚洲a∨一区二区三区| 国产欧美一区二区色老头| 久久亚洲精品欧美| 国产一区二区三区在线观看精品 | 欧美精品中文| 91性感美女视频| 成人在线视频首页| 黄色网址在线免费播放| 欧美美女福利视频| 日韩欧美一区二区三区在线视频| 亚洲人成久久| 麻豆传媒在线免费| 欧美日韩视频| 亚洲高清免费观看高清完整版| 欧美日韩精品免费在线观看视频| 久久精品香蕉视频| 日韩av一级| 久久精品亚洲精品国产欧美kt∨| 欧美另类第一页| 超碰免费在线| 性做久久久久久| 亚洲黄色av网址| 久久爱www久久做| 精品国产乱码久久久久久久久| 亚洲欧洲一区二区福利| 91亚洲精品| 精品香蕉一区二区三区| 亚洲日本一区二区三区在线观看| 亚洲成人自拍| 久久久久久尹人网香蕉| 国产一级片在线| 欧美一区二区大胆人体摄影专业网站| 成人妖精视频yjsp地址| 日本精品国产| 成人av蜜桃| 一个色免费成人影院| 最新av在线免费观看| 91网站视频在线观看| 白白色视频在线| heyzo一本久久综合| 2222www色视频在线观看| 亚洲区免费影片| 午夜天堂影视香蕉久久| 国产直播在线| 国产精品有限公司| 性欧美video另类hd尤物| 久久影院资源网| hitomi一区二区三区精品| 国产高清亚洲| 一区二区xxx| 日韩高清一级片| 日本日本精品二区免费| 久久精品国产网站| 欧美极品欧美精品欧美图片| 亚洲欧美日韩在线不卡| 国产精品一级伦理| 日韩国产欧美精品一区二区三区| 一区二区精品伦理...| 久久91精品国产91久久久| 国内精品久久久久久久久电影网| 岛国视频一区免费观看| 青青草97国产精品免费观看 | 97在线精品| 日韩高清av电影| 久久久久成人黄色影片| 在线观看中文字幕| 日韩欧美中文字幕精品| 不卡一区视频| 成人看片人aa| 欧美理论电影| 久久精品久久久久电影| 免费国产自久久久久三四区久久| 国产精品日韩高清| 国产凹凸在线观看一区二区| caoporn97免费视频公开| 欧美日韩国产大片| 国产精品原创视频| 亚洲a区在线视频| 夫妻av一区二区| 瑟瑟在线观看| 亚洲欧洲日本在线| 免费在线观看av网站| 欧美成人在线影院| 亚洲激情网址| 狠狠热免费视频| 宅男噜噜噜66一区二区66| 超碰97久久| 亚洲欧美国产一区二区| 亚洲综合一区二区| 国产一区二区三区影视| 国产精品毛片va一区二区三区| 久久午夜老司机| 国产精品揄拍一区二区| 尤物九九久久国产精品的分类| 婷婷综合福利| 91精品国产综合久久婷婷香蕉| 性欧美freesex顶级少妇| 国产欧美一区二区精品性| 精品国产三级a∨在线| 日韩三级在线免费观看| 日韩一区二区在线观看| 久久国产精品99国产| 欧美在线|欧美| 超碰精品在线观看| 亚洲亚洲精品三区日韩精品在线视频| 亚洲欧美综合另类在线卡通| 欧美电影网址| 美女视频久久| 欧美日韩国产中文字幕| 中文字幕一区日韩精品| 国产精品无码乱伦| 56国语精品自产拍在线观看| 国产不卡一二三区| 日本wwww视频| 亚洲欧美精品一区二区| 久久国产高清| 精品推荐蜜桃传媒| 欧美综合在线观看| 91网站黄www| 国产精品亚洲一区二区三区在线观看| 精品国产日本| 欧美视频三区在线播放| 亚欧美无遮挡hd高清在线视频| 亚洲国产精品三区| 久久成人在线视频| 99re热视频精品| 69堂精品视频在线播放| 喜爱夜蒲2在线| 亚洲第五色综合网| 免费观看日韩av| 美女精品导航| 一本色道久久99精品综合| 日韩亚洲欧美高清| 久久先锋资源| 青草在线视频在线观看| 日本欧美色综合网站免费| 欧美日韩高清一区二区不卡| 国产一区激情| 爱情岛论坛亚洲入口| 悠悠色在线精品| www国产精品| 色诱视频在线观看| 欧美成人小视频| 国产蜜臀av在线一区二区三区| 亚洲伊人精品酒店| 丰满爆乳一区二区三区| 欧美成人精品激情在线观看| 久久久久99精品一区| 国产成人高清精品免费5388| 香蕉521av成人网| 国产999精品| 色综合久久精品| 在线看片一区| 欧美xxxx性xxxxx高清| 一区二区三区四区视频在线| 精品亚洲男同gayvideo网站| 国产成人免费视频一区| 国产精品一区二区三区www| 国内外成人免费在线视频| 日本高清久久天堂| 在线视频你懂得一区二区三区| 亚洲一区日韩在线| 亚洲精品中文字幕| 国内外免费激情视频| 136fldh精品导航福利| 免费日韩精品中文字幕视频在线| 北岛玲一区二区三区| 成人资源av| 日韩久久久久久| 国产91对白在线观看九色| 综合激情久久| 国产视频在线看| 蜜臀av.com| 91av在线视频观看| 欧洲生活片亚洲生活在线观看| 美腿丝袜亚洲三区| 日韩一二三区| 黄色毛片在线看| 国产精品av免费观看| 91国产美女在线观看| 欧美日韩一级二级三级| 丁香五精品蜜臀久久久久99网站|