搜尋
首頁web前端uni-app手把手帶你開發一個uni-app日曆插件(並發布)

這篇文章手把手帶大家開發一個uni-app日曆插件,介紹下一款日曆插件是如何從開發到發布的,希望對大家有所幫助!

手把手帶你開發一個uni-app日曆插件(並發布)

相信我們在開發各類小程式或H5,甚至APP時,會把uni-app當作一個技術選型,其優點在於一鍵打包多端運行,較為強大的跨平台的性能。但是,只要開發就免不了使用插件,所以Dcloud為了方便開發者同時也為注入活力,開放了uni的插件市場。從此,我們可以很方便的使用其中的一些第三方外掛程式來滿足我們要開發的一些業務需求了。但你知道怎麼製作一款uni的插件嗎?它又是如何發佈到插件商城裡的嗎?

介紹

開發過微信小程式的朋友或許知道,它的主包限製成2M,我們在插件商城挑選插件時,其實還是要斟酌的,盡可能使用更輕量的,使用起來更方便的。最近有個需求,頁面中出現了一個日曆,日曆的功能很簡單就是切換月份,後端一些特殊日期資料能用顏色標記一下即可。但引入的ui庫的日曆又有點大,藉此機會,本期就按照需求特製了一款輕量級的日曆插件進行分享,看看它是如何開發出來並發佈到插件商城上面去的。

讓我們先來看看發布使用後的效果:

手把手帶你開發一個uni-app日曆插件(並發布)

#開發

手把手帶你開發一個uni-app日曆插件(並發布)

##建立檔案我們先開啟HBuilder X

,建立一個

uni-app手把手帶你開發一個uni-app日曆插件(並發布) 的項目,在裡面建立一個名叫

uni_modules

的資料夾。

手把手帶你開發一個uni-app日曆插件(並發布)然後 

uni_modules

上點選右鍵,裡面選擇新建 

uni_modules外掛

,會出現一個彈框要求你對外掛程式命名。

手把手帶你開發一個uni-app日曆插件(並發布)起名其實可以隨意,最好語義化強一些還要帶點自己的特色,比如,這款日曆插件我起名叫

ml-calendar

,咳,大致意思就是jsmask-light-calendar,也就是jsmask的輕量級日曆,見笑了。就這樣,點擊創建,就會產生好一個插件結構,我們就會在這裡面寫關於這個插件的所有邏輯。

還沒結束,我們還要在裡面建立一個index.js的文件,裡面寫入:

import mlCalendar from "./components/ml-calendar/ml-calendar"
export default mlCalendar
因為我們只涉及到一個ui元件,所以

export default直接指到這個元件上就好了。這一步很關鍵,因為如果不寫他的話,在引用這款插件的時候預設是找不到這個插件的,會報錯查找失敗。

手把手帶你開發一個uni-app日曆插件(並發布)

依賴引入

因為本次需要快速開發出一個日曆來,所以免不了出現很多時間形式的判斷和驗證,例如,如果日曆是當天就不會顯示阿拉伯數字了會直接顯示漢字今日,所以生成的時候就要判斷當前系統時間和日期是不是同一天上。所以,為了方便使用了dayjs

,相信身為前端開發者沒有不知道它的大名吧,它是一款極​​其輕量的時間庫,當然你也可以自己把用到的手寫出來,這樣體積會更小,但這裡為了方便和更多擴展可能就引入了。

這裡的

dayjs手把手帶你開發一個uni-app日曆插件(並發布) 文件,為了省事,我是從node安裝後的包裡拷貝出來的:

##現在就可以在vue 檔案中引入使用它了,當然,我這裡還建了個libs資料夾專門來儲存第三方函式庫檔案的。

import dayjs from '../../libs/dayjs.js'
######傳入參數#########我們先來看看要實現的介面圖:############
export default {
    name: "ml-calendar",
    props: {
        value: {
            type: [Number, String, Date],
            default: ""
        },
        range: {
            type: Array,
            default: () => ["2021-01", ""]
        },
        rows: {
            type: Array,
            default: () => []
        },
        // ...
    },
    // ...
}
###我們需要事先想好可能會傳來什麼值,會影響這個日曆的生成,首先,肯定要知道需要哪年哪月的數據,###value### 這裡可以傳入多種類型然後再讓dayjs處理出來,得到統一的日期格式,預設傳空字串,意思是當月。畢竟,知道年份月份才能得到當月的天數產生週對應的日麼。 ###

range 代表时间范围,可以选择上图的左右箭头对应的上一个月和下一个月,月份不能超出范围。

rows 代表着你传入日期对应的标识色,如 :

let rows = [{
    date: "2022-5-21",
    color: "#5F8BFB"
}, {
    date: "2022-5-24",
    color: "#FBA75F"
}, {
    date: "2022-5-26",
    color: "#FBA75F"
}]

接下来,我们就围绕着这些参数去完成这个日历编写。

遍历日期

export default {
    name: "ml-calendar",
    data() {
        return {
            year: "",
            month: "",
            date: [],
            now: "",
            first: dayjs(this.value).format("YYYY-MM")
        }
    },
    methods: {
        render() {
            this.date.length = 0;
            this.year = dayjs(this.first).year();
            this.month = dayjs(this.first).month() + 1;
            this.now = dayjs().format("YYYY-MM-DD");

            let days = [...new Array(dayjs(this.first).daysInMonth()).keys()].map(i => {
                let n = i + 1;
                let text = n  dayjs(date).diff(item.date, 'day') === 0);
                if (obj) {
                    color = obj.color
                }
                return {
                    text,
                    date,
                    color,
                    now,
                }
            })
            let week = dayjs(`${this.year}-${this.month}-1`).day();
            this.date = [...new Array(week ? (week - 1) : 6).fill(null), ...days]
        },
        // ...
    }
}

首先,我们定义一个 first 变量,表示需要展示的年月,因为要变成日历,肯定日期要对应周几,这样我们通过  dayjs(this.first).daysInMonth() 方法获取当前传入月份的天数,然后进行遍历,把 rows 传入的标记色都给填充上。再通过得知算出这个月的第一天是周几,然后在前面就空出多少个数据来生成出 date

<template>
	<view>
        <!-- more -->
		<view>
			<view :class="{'active':item&&item.color}">
				<view></view>
				<text>{{item.now?'今日':item.text}}</text>
			</view>
		</view>
	</view>
</template>

当然,通过观察,每行始终是7个等大的格子,所以样式方面我们大可以使用 grid布局 ,可以十分快速的实现效果 。

.m-calendar-month__days {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
}

监听更新

当修改当前日期时,或者标记数据时都要求重新渲染日历,此时用 watch 就可以轻松实现。

watch: {
    first(v) {
        this.render()
        this.$emit("change", {
            year: this.year,
            month: this.month,
        })
    },
    rows(v) {
       this.render()
    }
}

别忘了,我们还要定义两个事件给开发者使用,在 first 改变是会发出来一个 change事件 ,表示当前日历的年月,发生了改变发出通知。此时接受到通知,你可以从后端走接口重新获取新值或者完成其他的业务逻辑。而另一个是 select事件 来完成点击某个日期,发出的响应,在上个步骤的遍历阶段可以看出。

使用测试

<template>
    <view>
        <ml-calendar></ml-calendar>
    </view>
</template>
<script>
export default {
    data() {
        return {
            value:"2022-05",  // 初始化显示的月份
            range: ["2021-05", ""], // 时间范围
            rows: [{   // 特殊日期标注数据,当前日期和标注颜色
                date: "2022-5-21",
                color: "#5F8BFB"
            }, {
                date: "2022-5-24",
                color: "#FBA75F"
            }, {
                date: "2022-5-26",
                color: "#FBA75F"
            }],
            // ...
        }
    },
    methods: {
        // 切换日历时触发
        changeDate(e){
            console.log(e)  
        },
        // 点击日期返回当前日期对象 
        selectDate(e){
            console.log(e)  
        }
    }
    //...
}
</script>

日历的大小可能受外界容器的影响,所以,给他加一个100%的宽,此时,我们可以看到,他浏览器和微信小程序的表现是基本一致的。

手把手帶你開發一個uni-app日曆插件(並發布)

发布

编辑readme

发布之前我们当然需要在里面的 readme.md 文件写写你开发这款软件是什么?怎么用?这些至少说明白,不然别人过段时间自己都忘了怎么用了,方便别人也方便自己吧。

手把手帶你開發一個uni-app日曆插件(並發布)

执行发布

最后我们在 uni_modules 的文件夹中,找的我们刚刚写的 ml-calendar ,在这个文件夹上点击右键选择 发布到插件市场 (此前,必须要在Dcloud注册为开发者并且实名认证)。

此时,会填写一些关于这款插件的信息:

手把手帶你開發一個uni-app日曆插件(並發布)

当然,里面会涉及到这款插件的兼容情况的填写,至于到底兼不兼容各端,收不收费根据情况去选择吧。

1手把手帶你開發一個uni-app日曆插件(並發布)

当点击提交后,就会执行发布指令了。

此时,如果控制台会有发布后的返回信息:

1手把手帶你開發一個uni-app日曆插件(並發布)

如果成功则会返回一个插件地址链接,点开链接:

1手把手帶你開發一個uni-app日曆插件(並發布)

到这里属于你自己的一款插件就开发并发布完成了,是不是非常的容易啊。以后在开发uni-app时遇到可以抽离的,我们都可以制成插件发布出来,成就感和便利性都是满满当当~

推荐:《uniapp教程

以上是手把手帶你開發一個uni-app日曆插件(並發布)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:掘金社区。如有侵權,請聯絡admin@php.cn刪除
您如何在不同平台(例如移動,Web)上調試問題?您如何在不同平台(例如移動,Web)上調試問題?Mar 27, 2025 pm 05:07 PM

本文討論了有關移動和網絡平台的調試策略,突出顯示了Android Studio,Xcode和Chrome DevTools等工具,以及在OS和性能優化的一致結果的技術。

哪些調試工具可用於Uniapp開發?哪些調試工具可用於Uniapp開發?Mar 27, 2025 pm 05:05 PM

文章討論了用於Uniapp開發的調試工具和最佳實踐,重點關注Hbuilderx,微信開發人員工具和Chrome DevTools等工具。

您如何為Uniapp應用程序執行端到端測試?您如何為Uniapp應用程序執行端到端測試?Mar 27, 2025 pm 05:04 PM

本文討論了跨多個平台的Uniapp應用程序的端到端測試。它涵蓋定義測試方案,選擇諸如Appium和Cypress之類的工具,設置環境,寫作和運行測試,分析結果以及集成

您可以在Uniapp應用程序中執行哪些不同類型的測試?您可以在Uniapp應用程序中執行哪些不同類型的測試?Mar 27, 2025 pm 04:59 PM

本文討論了針對Uniapp應用程序的各種測試類型,包括單元,集成,功能,UI/UX,性能,跨平台和安全測試。它還涵蓋了確保跨平台兼容性,並推薦Jes等工具

Uniapp中有哪些常見的性能反版?Uniapp中有哪些常見的性能反版?Mar 27, 2025 pm 04:58 PM

本文討論了UNIAPP開發中的共同績效抗模式,例如過度的全球數據使用和效率低下的數據綁定,並提供策略來識別和減輕這些問題,以提高應用程序性能。

您如何使用分析工具來識別uniapp中的性能瓶頸?您如何使用分析工具來識別uniapp中的性能瓶頸?Mar 27, 2025 pm 04:57 PM

本文討論了使用分析工具來識別和解決Uniapp中的性能瓶頸,重點是設置,數據分析和優化。

您如何在Uniapp中優化網絡請求?您如何在Uniapp中優化網絡請求?Mar 27, 2025 pm 04:52 PM

本文討論了在UNIAPP中優化網絡請求的策略,重點是減少延遲,實施緩存以及使用監視工具來增強應用程序性能。

如何優化Uniapp中的Web性能的圖像?如何優化Uniapp中的Web性能的圖像?Mar 27, 2025 pm 04:50 PM

本文討論了通過壓縮,響應式設計,懶惰加載,緩存和使用WebP格式來優化Uniapp中的圖像,以更好地進行Web性能。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中