欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue.js實(shí)現(xiàn)無限加載與分頁功能開發(fā)

 更新時(shí)間:2016年11月03日 10:00:54   作者:aryu  
這篇文章主要為大家詳細(xì)介紹了Vue.js實(shí)現(xiàn)無限加載與分頁功能開發(fā)實(shí)踐,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本篇文章是一篇Vue.js的教程,目標(biāo)在于用一種常見的業(yè)務(wù)場景——分頁/無限加載,幫助讀者更好的理解Vue.js中的一些設(shè)計(jì)思想。與許多Todo List類的入門教程相比,更全面的展示使用Vue.js完成一個(gè)需求的思考過程;與一些構(gòu)建大型應(yīng)用的高階教程相比,又更專注于一些零碎細(xì)節(jié)的實(shí)現(xiàn),方便讀者快速掌握、致用。

需求分析

當(dāng)一個(gè)頁面中信息量過大時(shí)(例如一個(gè)新聞列表中有200條新聞需要展示),就會(huì)產(chǎn)生問題,例如:

》數(shù)據(jù)量過大,影響加載速度

》用戶體驗(yàn)差,很難定位到之前自己看過的某篇文章

》擴(kuò)展性差,如果200條變?yōu)?000條或者更多

所以常見的解決思路就是至底時(shí)加載數(shù)據(jù)或者分頁展示。無限加載的實(shí)現(xiàn)過程類似于:

1.ajax類方法獲取數(shù)據(jù)

2.數(shù)據(jù)存入本地?cái)?shù)組

3.數(shù)組中的每條數(shù)據(jù)對(duì)應(yīng)插入一個(gè)HTML模板片段中

4.將HTML片段append到節(jié)點(diǎn)中

前端分頁的實(shí)現(xiàn)過程類似于:

1.ajax類方法獲取數(shù)據(jù)

2.數(shù)據(jù)替換本地?cái)?shù)組

3.數(shù)組中的每條數(shù)據(jù)對(duì)應(yīng)插入一個(gè)HTML模板片段中

4.清空節(jié)點(diǎn)后將HTML片段append到節(jié)點(diǎn)中

往往修改或者維護(hù)代碼時(shí),我們會(huì)發(fā)現(xiàn)渲染HTML和插入部分是比較煩人的。因?yàn)槲覀冃枰獙TML拼接成字符串,在對(duì)應(yīng)的位置插入數(shù)據(jù),往往就是一段非常長的字符串,之后想要加個(gè)class都費(fèi)勁。es6的模板字符串讓這個(gè)情況有所好轉(zhuǎn),但是依然有瑕疵(例如實(shí)際編寫時(shí)無法HTML代碼高亮)。同時(shí)我們還需要寫不少for或者forEach去循環(huán)數(shù)組,再命令式的append,如果這段代碼片段有一些復(fù)雜的交互,可能還需要通過事件代理綁定一堆方法。

如果在完成這類業(yè)務(wù)時(shí),你也遇到過上述的問題,那么你就會(huì)發(fā)現(xiàn)Vue真是太coooooool了,let's vue!

新建一個(gè)Vue.js項(xiàng)目

強(qiáng)烈推薦使用vue-cli來新建一個(gè)項(xiàng)目。

一開始你可能會(huì)認(rèn)為用node.js和npm安裝一大堆庫,生成了一些你不太了解的目錄和配置文件,一寫代碼還會(huì)跳出一堆eslint的提示。但是這絕對(duì)物有所值,因?yàn)檫@樣的一個(gè)模板可以幫你更好的理解Vue.js組織文件的思路,并且當(dāng)你適應(yīng)之后,你會(huì)發(fā)現(xiàn)這些條條框框極大地加快了你的開發(fā)效率。

在這次的教程中,我們新建了一個(gè)名叫l(wèi)oadmore的項(xiàng)目,具體的新建項(xiàng)目流程可以參照官網(wǎng)教程的安裝一節(jié)。

布局頁面結(jié)構(gòu)

為了配合教程的逐步深入,我先從完成 加載更多 功能入手。為了和之后的分頁保持一致,我的頁面準(zhǔn)備由兩部分組成,一是信息列表,二是底部的一個(gè)加載更多的按鈕,我將他們都放在App.vue這個(gè)根組件中。

<template>
 <div id="app">
 <list></list>
 <a class="button" @click="next" >GO NEXT</a>
 </div>
</template>

<script>
import List from './components/List'

export default {
 components: {
 List
 },
 data () {
 return {
 ...
 }
 },
 methods: {
 next () {
 ...
 }
 }
}
</script>

<style scoped>
 .button {
 display: block;
 width: 100%;
 background: #212121;
 color: #fff;
 font-weight: bold;
 text-align: center;
 padding: 1em;
 cursor: pointer;
 text-decoration: none;
 }
 .button span {
 margin-left: 2em;
 font-size: .5rem;
 color: #d6d6d6;
 }
</style>

在這個(gè)過程中,我們根據(jù)Vue的設(shè)計(jì)思想有了如下思路:

1.在信息列表中,我們會(huì)完成我們上文中提到的幾個(gè)步驟,而這些步驟都只和信息列表本身有關(guān),與Next按鈕間唯一的聯(lián)系就是Next點(diǎn)擊后需要觸發(fā)信息列表去獲取,而這可以通過props傳遞。所以我們把列表及其自身業(yè)務(wù)邏輯、樣式都放在List.vue這個(gè)組件中。

2.我們?yōu)榘粹o定義了一些基本的樣式,但是我們用的css選擇器就是一個(gè).button類名,可能會(huì)和別的組件中的.button樣式?jīng)_突,所以我們加入了一個(gè)scoped屬性,讓App.vue中的style樣式只作用于這個(gè)組件內(nèi)部。

注意:scoped并不會(huì)影響css的作用優(yōu)先級(jí),使用scoped不代表不會(huì)被外部樣式表覆蓋。

3.我們想引入一些基礎(chǔ)樣式,比如reset.css。如果在項(xiàng)目中使用了sass之類的語言,那么可以將對(duì)應(yīng)的外部sass文件放在assets文件夾中,通過import引入。普通的css可以直接寫在一個(gè)不加scoped屬性的組件中,但是如果你確定這個(gè)樣式表不會(huì)被頻繁改動(dòng),那么也可以作為第三方靜態(tài)資源引入index.html中。例如這個(gè)例子中,我在index.html中加入了:

<link rel="stylesheet" href="./static/reset.css">

效果:

完成List.vue

目前我們主要的業(yè)務(wù)邏輯都是圍繞信息列表展開的,也就是我們創(chuàng)建的List.vue。首先,我們需要獲取目標(biāo)數(shù)據(jù),我選用了cnodejs.org社區(qū)的API作為例子進(jìn)行編寫。如果你也想用一個(gè)封裝好的ajax庫的話,應(yīng)該這么做:

引入第三方JS庫
將目標(biāo)JS庫文件放在static文件夾中,例如我選擇的是reqwest.js,然后在index.html先引入。

<script src="./static/reqwest.min.js"></script>

然后在build配置文件夾中,修改webpack.base.conf.js,export externals屬性:

externals: {
 'reqwest': 'reqwest'
}

這樣我們?cè)谖覀兊捻?xiàng)目中,就可以隨時(shí)加載第三方庫了。

import reqwest from 'reqwest'

寫個(gè)API接口
在這個(gè)例子中,我們只需要調(diào)用文章列表這一個(gè)接口,但是實(shí)際項(xiàng)目中,可能你需要調(diào)用很多接口,而這些接口又會(huì)在多個(gè)組件中被用到。那么調(diào)用接口的邏輯四散在各個(gè)組件中肯定是不好的,想象一下對(duì)方的url發(fā)生了變化,你就得在無數(shù)個(gè)組件中一個(gè)個(gè)檢查是否要修改。

所以我在src文件夾中新建了一個(gè)api文件夾,用于存放各類API接口。當(dāng)前例子中,要獲取的是新聞列表,所以新建一個(gè)news.js文件:

import reqwest from 'reqwest'

const domain = 'https://cnodejs.org/api/v1/topics'

export default {
 getList (data, callback) {
 reqwest({
 url: domain,
 data: data
 })
 .then(val => callback(null, val))
 .catch(e => callback(e))
 }
}

這樣我們就擁有了一個(gè)獲取新聞列表的API:getList。

編寫組件

我們用一個(gè)<ol>作為新聞列表,內(nèi)部的每一個(gè)<li>就是一條新聞,其中包括標(biāo)題、時(shí)間和作者3個(gè)信息。

在data中,我們用一個(gè)名為list的數(shù)組來儲(chǔ)存新聞列表的數(shù)據(jù),一開始當(dāng)然是空的。我們?cè)僭赿ata中設(shè)置一個(gè)名為limit的值,用來控制每頁加載多少條數(shù)據(jù),作為參數(shù)傳給getList這個(gè)API。

因此我們的template部分是這樣的(加入了一些style美化樣式):

<template>
 <ol>
 <li v-for="news of list">
 <p class="title">{{ news.title }}</p>
 <p class="date">{{ news.create_at }}</p>
 <p class="author">By: {{ news.author.loginname }}</p>
 </li>
 </ol>
</template>

<style scoped>
 ol {
 margin-left: 2rem;
 list-style: outside decimal;
 }
 li {
 line-height: 1.5;
 padding: 1rem;
 border-bottom: 1px solid #b6b6b6;
 }
 .title {
 font-weight: bold;
 font-size: 1.3rem;
 }
 .date {
 font-size: .8rem;
 color: #d6d6d6;
 }
</style>

之后我們顯然需要使用getList來獲取數(shù)據(jù),不過先想想我們會(huì)在哪幾個(gè)地方使用呢?首先,我們需要在組件開始渲染時(shí)自動(dòng)獲取一次列表,填充基礎(chǔ)內(nèi)容。其次,我們?cè)诿看吸c(diǎn)擊APP.vue中的Next按鈕時(shí)也需要獲取新的列表。

所以我們?cè)趍ethods中定義一個(gè)get方法,成功獲取到數(shù)據(jù)后,就把獲取的數(shù)組拼接到當(dāng)前l(fā)ist數(shù)組后,從而實(shí)現(xiàn)了加載更多。

沿著這個(gè)思路,再想想get方法需要的參數(shù),一個(gè)是包含了page和limit兩個(gè)屬性的對(duì)象,另一個(gè)是回調(diào)函數(shù)。回調(diào)函數(shù)我們已經(jīng)說過,只需要拼接數(shù)組即可,因此只剩下最后一個(gè)page參數(shù)還沒設(shè)置。

在初始化的時(shí)候,page的值應(yīng)該為1,默認(rèn)是第一頁內(nèi)容。之后page的值只由Next按鈕改變,所以我們讓page通過props獲取App.vue中傳來的page值。

最后則是補(bǔ)充get方法觸發(fā)的條件。一是在組件的生命周期函數(shù)created中調(diào)用this.get()獲取初始內(nèi)容,另一是在page值變化時(shí)對(duì)應(yīng)獲取,所以我們watch了page屬性,當(dāng)其變化時(shí),調(diào)用this.get()。

最后List.vue的script長這樣:

<script>
import news from '../api/news'

export default {
 data () {
 return {
 list: [],
 limit: 10
 }
 },
 props: {
 page: {
 type: Number,
 default: 1
 }
 },
 created () {
 this.get()
 },
 watch: {
 page (val) {
 this.get()
 }
 },
 methods: {
 get () {
 news.getList({
 page: this.page,
 limit: this.limit
 }, (err, list) => {
 if (err) {
 console.log(err)
 } else {
 list.data.forEach((data) => {
 const d = new Date(data.create_at)
 data.create_at = `${d.getFullYear()}-${d.getMonth() + 1}-${d.getDate()}`
 })
 this.list = this.list.concat(list.data)
 }
 })
 }
 }
}
</script>

同時(shí)我們將App.vue中的<list>修改為:

<list :page="page"></list>

再為page在App.vue中添加一個(gè)初始值以及對(duì)應(yīng)的方法next:

data () {
 return {
 page: 1
 }
},
methods: {
 next () {
 this.page++
 }
}

這樣我們就已經(jīng)完成了加載更多的功能。

改寫為分頁

因?yàn)橹拔覀兊乃悸贩浅G逦a結(jié)構(gòu)也很明了,所以改寫起來會(huì)非常簡單,只需要將List.vue中拼接數(shù)組改為賦值數(shù)組就可以了:

// 常規(guī)loadmore
// this.list = this.list.concat(list.data)
// 分頁
this.list = list.data

就這么簡單的一行就完成了功能的改變,這就是Vue.js中核心的數(shù)據(jù)驅(qū)動(dòng)視圖的威力。當(dāng)然,接下來我們還要做點(diǎn)更c(diǎn)ooooool的。

添加功能

因?yàn)榉猪撎鎿Q了原來的數(shù)組,所以僅僅一個(gè)Next按鈕不夠用了,我們還需要一個(gè)Previous按鈕返回上一頁。同樣的,也給Previous按鈕綁定一個(gè)previous方法,除了用this.page--改變page的值以外,還需要對(duì)this.page === 1的邊界條件進(jìn)行一個(gè)判斷。

同時(shí)為了方便知道我們當(dāng)前的頁數(shù),在按鈕中,加入{{ page }}顯示頁數(shù)。

<a class="button" @click="next" >GO NEXT<span>CURRENT:{{page}}</span></a>

transition動(dòng)畫
編寫和完善功能的過程中,已經(jīng)充分體現(xiàn)了Vue.js清晰和便利的一面,接下來繼續(xù)看看其它好用的功能,首先就是transition動(dòng)畫。

為了展示transition的威力,首先我找到了一個(gè)模仿的對(duì)象:lavalamp.js( Demo地址 )。

在Demo中可以看到頁面以一種非常優(yōu)雅的動(dòng)畫過渡完成了切換內(nèi)容的過程,其本身是用JQuery+CSS動(dòng)畫完成的,我準(zhǔn)備用Vue.js進(jìn)行改寫。

首先學(xué)習(xí)了一下原作者的實(shí)現(xiàn)思路以后,發(fā)現(xiàn)是將一個(gè)div作為loader,position設(shè)定為fixed。當(dāng)翻頁時(shí),根據(jù)點(diǎn)擊的按鈕不同,loader從頂部或者底部擴(kuò)展高度,達(dá)到100%。數(shù)據(jù)加載完畢后,再折疊高度,最終隱藏。

那么初步的思路如下:

1.添加一個(gè)loader,最小高度與按鈕一致,背景同為黑色,讓過渡顯得更自然。

2.loader高度需要達(dá)到一個(gè)屏幕的高度,所以設(shè)置html和body的height為100%。

3.需要有一個(gè)值,作為loader是否顯示的依據(jù),我定為finish,其默認(rèn)值值為true,通過給loader添加v-show="!finish"來控制其顯示。

4.在next和previous方法中添加this.finish = false觸發(fā)loader的顯示。

5.在App.vue和List.vue建立一個(gè)雙向的props屬性綁定至finish,當(dāng)List.vue中的get方法執(zhí)行完畢后,通過props將App.vue中的finish設(shè)定為true,隱藏loader。

6.給loader添加一個(gè)transition。由于動(dòng)畫分為頂部展開和底部展開兩種,所以使用動(dòng)態(tài)的transition為其指定正確的transition名稱。

7.新增一個(gè)值up,用于判斷動(dòng)畫從哪個(gè)方向開始,其默認(rèn)值為false。在previous方法中,執(zhí)行this.up = true,反之在next方法中,則執(zhí)行this.up = false。

根據(jù)思路,寫出的loader應(yīng)該是這樣的(style等樣式設(shè)定在最后統(tǒng)一展示):

<div id="loader" v-show="!finish" :transition="up? 'up-start':'down-start'">
 <span>Loading</span>
</div>

可以看到我設(shè)定了up-start和down-start兩種transition方式,對(duì)應(yīng)的css動(dòng)畫代碼如下:

.down-start-transition {
 bottom: 0;
 height: 100%;
 }
 .down-start-enter {
 animation: expand .5s 1 cubic-bezier(0, 1, 0, 1) both;
 }
 .down-start-leave {
 animation: collapse .5s 1 cubic-bezier(0, 1, 0, 1) both;
 top: 0;
 bottom: auto;
 }
 .up-start-transition {
 top: 0;
 height: 100%;
 }
 .up-start-enter {
 animation: expand .5s 1 cubic-bezier(0, 1, 0, 1) both;
 }
 .up-start-leave {
 animation: collapse .5s 1 cubic-bezier(0, 1, 0, 1) both;
 top: auto;
 bottom: 0;
 }
 @keyframes expand {
 0% {
 height: 3em;
 transform: translate3d(0, 0, 0);
 }
 100% {
 height: 100%;
 transform: translate3d(0, 0, 0);
 }
 }
 @keyframes collapse {
 0% {
 height: 100%;
 transform: translate3d(0, 0, 0);
 }
 100% {
 height: 3em;
 transform: translate3d(0, 0, 0);
 }
 }

設(shè)置了expand和collapse兩個(gè)animation,再在transition的各個(gè)生命周期鉤子中做對(duì)應(yīng)的綁定,就達(dá)到了和lavalamp.js相接近的效果。

為了保證動(dòng)畫能執(zhí)行完整,在List.vue的get方法執(zhí)行完之后,還使用了一個(gè)setTimeout定時(shí)器讓finish延時(shí)0.5秒變?yōu)閠rue。

優(yōu)化體驗(yàn)
動(dòng)畫效果完成之后,實(shí)際使用時(shí)發(fā)現(xiàn)lavalamp.js還有個(gè)巧妙地設(shè)計(jì),就是點(diǎn)擊Previous后,頁面前往底部,反之點(diǎn)擊Next后則前往頂部。

實(shí)現(xiàn)后者并不復(fù)雜,在next方法中加入以下一行代碼調(diào)整位置即可:

document.body.scrollTop = 0

previous前往底部則略微復(fù)雜一點(diǎn),因?yàn)楂@取到數(shù)據(jù)之后,頁面高度會(huì)發(fā)生改變,如果在previous中執(zhí)行scrollTop的改變,有可能會(huì)出現(xiàn)新的內(nèi)容填充后高度變長,頁面不到底的情況。所以我watch了finish的值,僅當(dāng)點(diǎn)擊按鈕為previous且finish變化為false至true時(shí)前往底部,代碼如下:

watch: {
 finish (val, oldVal) {
 if (!oldVal && val && this.up) {
 document.body.scrollTop = document.body.scrollHeight
 }
 }
}

前端路由
完成以上內(nèi)容之后,發(fā)現(xiàn)不論翻到第幾頁,一旦刷新,就會(huì)回到第一頁。vue-router就是為解決這類問題而生的。

首先我們引入VueRouter,方式可以參考上文中的“引入第三方JS庫”。然后在main.js對(duì)路由規(guī)則進(jìn)行一些配置。

我們的思路包括:

1.我們需要在url上反映出當(dāng)前所處的頁數(shù)。

2.url中的頁數(shù)應(yīng)該與所有組件中的page值保持一致。

3.點(diǎn)擊Next和Previous按鈕要跳轉(zhuǎn)到對(duì)應(yīng)的url去。

4.在這個(gè)例子中我們沒有router-view。

因此main.js的配置如下:

import Vue from 'vue'
import App from './App'
import VueRouter from 'VueRouter'

Vue.use(VueRouter)

const router = new VueRouter()
router.map({
 '/page/:pageNum': {
 name: 'page',
 component: {}
 }
})

router.redirect({
 '/': '/page/1'
})

router.beforeEach((transition) => {
 if (transition.to.path !== '/page/0') {
 transition.next()
 } else {
 transition.abort()
 }
})

router.start(App, 'app')

首先定義了一個(gè)名為page的具名路徑。之后將所有目標(biāo)路徑為'/',也就是初始頁的請(qǐng)求,重定向到'/page/1'上保證一致性。最后再在每次路由執(zhí)行之前做一個(gè)判斷,如果到了'/page/0'這樣的非法路徑上,就不執(zhí)行transition.next()。

根據(jù)之前的思路,在App.vue中,獲取路由對(duì)象的參數(shù)值,賦值給page。同時(shí)給兩個(gè)按鈕添加對(duì)應(yīng)的v-link。

本文已被整理到了《Vue.js前端組件學(xué)習(xí)教程》,歡迎大家學(xué)習(xí)閱讀。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解VScode編輯器vue環(huán)境搭建所遇問題解決方案

    詳解VScode編輯器vue環(huán)境搭建所遇問題解決方案

    這篇文章主要介紹了VScode編輯器vue環(huán)境搭建所遇問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 利用nodeJS+vue圖片上傳實(shí)現(xiàn)更新頭像的過程

    利用nodeJS+vue圖片上傳實(shí)現(xiàn)更新頭像的過程

    Vue是一套構(gòu)建用戶界面的框架,最近工作中遇到了一個(gè)需求,需要做一個(gè)更新頭像的通能,下面這篇文章主要給大家介紹了關(guān)于利用nodeJS+vue圖片上傳的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • vue2.0父子組件間通信的實(shí)現(xiàn)方法

    vue2.0父子組件間通信的實(shí)現(xiàn)方法

    本篇文章主要介紹了vue2.0父子組件間通信的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-04-04
  • 解決VUEX兼容IE上的報(bào)錯(cuò)問題

    解決VUEX兼容IE上的報(bào)錯(cuò)問題

    下面小編就為大家分享一篇解決VUEX兼容IE上的報(bào)錯(cuò)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Vue路由參數(shù)的傳遞與獲取方式詳細(xì)介紹

    Vue路由參數(shù)的傳遞與獲取方式詳細(xì)介紹

    顧名思義,vue路由傳參是指嵌套路由時(shí)父路由向子路由傳遞參數(shù),否則操作無效。傳參方式可以劃分為params傳參和query傳參,params傳參又可以分為url中顯示參數(shù)和不顯示參數(shù)兩種方式。具體區(qū)分和使用后續(xù)分析
    2022-09-09
  • Vue表單提交點(diǎn)擊事件只允許點(diǎn)擊一次的實(shí)例

    Vue表單提交點(diǎn)擊事件只允許點(diǎn)擊一次的實(shí)例

    這篇文章主要介紹了Vue表單提交點(diǎn)擊事件只允許點(diǎn)擊一次的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • vue獲取后臺(tái)json字符串方式

    vue獲取后臺(tái)json字符串方式

    這篇文章主要介紹了vue獲取后臺(tái)json字符串方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue實(shí)現(xiàn)返回頂部按鈕實(shí)例代碼

    Vue實(shí)現(xiàn)返回頂部按鈕實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于Vue實(shí)現(xiàn)返回頂部按鈕的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • vue3.x中apollo的使用案例代碼

    vue3.x中apollo的使用案例代碼

    這篇文章主要介紹了vue3.x中apollo的使用,通過前端自身直接獲取到apollo的配置目前看到官方支持的客戶端是沒有vue的,本文給大家介紹了前端獲取到apollo數(shù)據(jù)的過程,需要的朋友可以參考下
    2023-02-02
  • vant自定義引入iconfont圖標(biāo)及字體的方法步驟

    vant自定義引入iconfont圖標(biāo)及字體的方法步驟

    因?yàn)関antUI給的圖標(biāo)非常少,為了滿足自己的需求,就應(yīng)該找到一種方法來向vant添加自己自定義的圖標(biāo),對(duì)于自定義圖標(biāo)我第一時(shí)間想到的就是阿里的iconfont矢量圖庫,這篇文章主要給大家介紹了關(guān)于vant自定義引入iconfont圖標(biāo)及字體的方法步驟,需要的朋友可以參考下
    2023-09-09

最新評(píng)論