1. 前言
在uniapp的开发过程中,我们往往会用到一些公共的方法,比如操作缓存、时间格式化等等。这些方法的重用可以提高开发效率和代码的可维护性。本文将介绍uniapp中写公共方法的地方,并且以实际的例子来演示如何编写公共方法。
2. uniapp写公共方法的地方
2.1 放在组件中
我们可以将公共方法封装在组件中。这样,在不同页面中使用这个组件时,就可以直接调用这个组件里面的方法。例如,我们创建一个包含时间格式化方法的组件:
// 时间格式化方法
function formatDate(time, format) {
// code...
}
export default {
methods: {
formatDate: formatDate
}
}
然后,我们在需要使用这个方法的页面中引入这个组件,即可调用里面的方法:
<template>
<my-component />
</template>
<script>
import MyComponent from '@/components/MyComponent'
export default {
components: {
MyComponent
},
mounted() {
const now = new Date()
const formattedTime = this.$refs.myComponent.formatDate(now, 'yyyy-MM-dd hh:mm:ss')
console.log(formattedTime)
}
}
</script>
注意:在上述代码中,我们通过this.$refs
来访问组件中的方法。
2.2 放在mixins中
可以将公共方法封装在mixins中。将多个组件需要的公共函数,放在mixins里可以让多个组件共用。
示例代码如下:
// mixin.js
// 时间格式化方法
function formatDate(time, format) {
// code...
}
export default {
methods: {
formatDate: formatDate
}
}
组件中引入mixins:
import mixin from '@/mixins/mixins'
export default {
mixins: [mixin],
mounted() {
const now = new Date()
const formattedTime = this.formatDate(now, 'yyyy-MM-dd hh:mm:ss')
console.log(formattedTime)
}
}
2.3 放在store中
将公共方法封装在store中。在vue中,组件之间的通讯是通过props、$emit等等来实现的,但是对于非父子关系的组件之间的通讯,这种方式就不太适用了。这个时候,就需要用到vuex。
例如,我们创建一个包含用户信息管理方法的store:
// user.js
const state = {
userInfo: null
}
const mutations = {
setUserInfo(state, userInfo) {
state.userInfo = userInfo
}
}
const actions = {
// code...
}
// 用户信息管理方法
const user = {
getters: {
getUserInfo: state => state.userInfo,
},
mutations,
actions
}
export default user
将store引入到vue项目中:
import Vue from 'vue'
import Vuex from 'vuex'
import user from './modules/user'
Vue.use(Vuex)
const store = new Vuex.Store({
modules: {
user
}
})
export default store
在组件中使用store中的方法:
import { mapGetters } from 'vuex'
export default {
computed: {
...mapGetters({
userInfo: 'getUserInfo'
})
},
mounted() {
console.log(this.userInfo)
}
}
3. 编写公共方法的示例
3.1 操作缓存
在uniapp中,我们可以使用uni.setStorageSync、uni.getStorageSync、uni.removeStorageSync等方法来操作缓存。但是这些方法在不同项目中会有重复的代码,可以将其封装成公共方法。下面,我们演示如何封装操作缓存的公共方法。
在/utils/storage.js中创建如下的公共方法:
const setStorage = (key, value) => {
//... code
}
const getStorage = (key) => {
//... code
}
const removeStorage = (key) => {
//... code
}
export {
setStorage,
getStorage,
removeStorage
}
在/mixins/mixins.js中引入storage.js中的方法:
import { setStorage, getStorage, removeStorage } from '@/utils/storage'
export default {
methods: {
setStorage: setStorage,
getStorage: getStorage,
removeStorage: removeStorage
}
}
在需要使用操作缓存的页面中引入mixins即可使用:
import mixin from '@/mixins/mixins'
export default {
mixins: [mixin],
mounted() {
this.setStorage('key', 'value') // 存储key/value到缓存中
const value = this.getStorage('key') // 从缓存中取出key对应的value
console.log(value) // => 'value'
this.removeStorage('key') // 从缓存中移除key对应的缓存数据
}
}
3.2 时间格式化
在uniapp中,时间格式化方法可以通过moment.js、day.js等第三方库来实现。但是我们在开发小程序的时候,为了减少小程序包的大小,不推荐使用第三方库。下面我们演示如何编写时间格式化公共方法。
在/utils/date.js中创建如下的公共方法:
const formatDate = (time, format) => {
//... code
}
export {
formatDate
}
在/mixins/mixins.js中引入time.js中的方法:
import { formatDate } from '@/utils/date'
export default {
methods: {
formatDate: formatDate
}
}
在需要使用时间格式化的页面中引入mixins即可使用:
import mixin from '@/mixins/mixins'
export default {
mixins: [mixin],
mounted() {
const now = new Date()
const formattedTime = this.formatDate(now, 'yyyy-MM-dd hh:mm:ss')
console.log(formattedTime)
}
}
4. 总结
将公共方法封装在组件、mixins、store中都是可行的。但是在实际开发中,根据具体情况,可能需要结合使用不同的方式来实现公共方法。
以上是编写uniapp公共方法的地方以及对公共方法进行了实际演示的总结,希望能够对uniapp开发中的公共方法的编写有所帮助。