欢迎光临散文网 会员登陆 & 注册

vue3.0 的 Composition API 的一种使用方法

2023-06-29 06:09 作者:波叔8866  | 我要投稿

<template>  <div>      论坛列表      <div v-for="(item, index) in articleList" :key="'articleList' + index">        {{index}}:{{item.title}}        {{item.viewCount}}      </div>      <div><!--分页-->        <a-pagination v-model:current="acticleCurrent" :total="50" show-less-items />      </div>  </div>  <div style="width:400px">      发个帖子      标题:<a-input v-model:value="articleForm.title"/>      内容:<a-input v-model:value="articleForm.content"/>      <a-button type="dashed" @click="sendArticle" >发表帖子</a-button>  </div></template>

上面的模板部分没有啥区别,变化部分在js代码。
我们可以先写一个帖子列表的管理类,包含帖子列表的数据,和依据页号加载数据的方法。

代码如下:

// 帖子列表的管理类const manageArticleList = () => {  const articleList = ref([    {      title: '这是帖子',      viewCount: 100,      sendTime: '2020-10-20'    }  ])  // 依据页号加载帖子列表  const loagActicleListByPage = (pageIndex) => {    // alert(pageIndex)    articleList.value = [      {        title: '这是新加载的帖子帖子',        viewCount: 100 + parseInt(pageIndex),        sendTime: '2020-10-20'      }    ]  }  return {    articleList,    loagActicleListByPage  } }

再写一个分页的管理类(使用antdv的a-pagination),代码如下

// 分页管理类const manageActiclePage = () => {  const acticleCurrent = ref(0)  return {    acticleCurrent  } }

最后我们可以在setup里面把这两个管理类给结合起来,一起返回给view。

export default {  setup () {    // 引入查询管理    const { articleList, loagActicleListByPage } = manageArticleList()    // 引入分页管理    const { acticleCurrent } = manageActiclePage()    // 监听页号变化,加载数据    watch(acticleCurrent, (newValue, oldValue) => {      loagActicleListByPage(newValue)    })    // 返回给view    return {      articleList,      acticleCurrent,    }  } }

在setup里面,监听 acticleCurrent 页号变化,调用 manageArticleList 的 loagActicleListByPage 事件,加载数据。
当然也可以有其他的组合方式,这里只是举个简单的例子。

这样代码可以根据业务逻辑分散开,便于扩展和维护,比如我们要加一个查询功能,那么可以在 manageArticleList 里面加个 loagActicleListByQuery 的事件。

最后的效果就是,代码依据业务逻辑,完全分散成多个管理类,setup只需要负责加载和整合即可,setup里面也不会有很多代码。

管理类应该可以写在单独的js文件里面,比如我们把表单的js代码写在单独的js文件里面:(bbs-manageArticleForm.js)

import { ref } from 'vue'// 帖子列表的管理类export function manageArticleForm () {  const modelForm = ref(    {      title: '这是帖子标题',      content: '帖子内容',      sendTime: '2020-10-20'    }  )  // 依据页号加载帖子列表  const sendArticle = () => {    // 调用axios 向后端提交    alert('假装发表成功了。。。')  }  return {    articleForm: modelForm,    sendArticle  } }

然后在views里面用import引入

import { manageArticleForm } from './bbs-manageArticleForm.js'

在setup里面设置如下:

setup() {    ......    // 表单    const { articleForm, sendArticle } = manageArticleForm()    // 返回给view    return {      ......      articleForm,      sendArticle,      ......    } }


vue3.0 的 Composition API 的一种使用方法的评论 (共 条)

分享到微博请遵守国家法律