vue3.0 的 Composition API 的一种使用方法-全球热点

2023-06-29 06:05:26 来源:哔哩哔哩

<template>  <div>      论坛列表      <div v-for="(item, index) in articleList" :key="'articleList' + index">        {{index}}:{{}}        {{}}      </div>      <div><!--分页-->        <a-pagination v-model:current="acticleCurrent" :total="50" show-less-items />      </div>  </div>  <div style="width:400px">      发个帖子      标题:<a-input v-model:value=""/>      内容:<a-input v-model:value=""/>      <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)     = [      {        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文件里面:()

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 './'

在setup里面设置如下:

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

标签:

西陇科学: 第五届监事会第十四次会议决议公告

证券代码:002584       证券简称:西陇科学      公告编号:2022-080         ...

2022-12-07 19:01:59

汉嘉设计:近期公司作为联合体成员之一中标了钱潮嘉苑共有产权房项目EPC工程总承包工程_每日观点

(原标题:汉嘉设计:近期公司作为联合体成员之一中标了钱潮嘉苑共有产权房项目EPC工程总承包工程)同花...

2022-12-06 17:38:42

山东推出文化体验主题旅游产品 推出多种旅游惠民措施

据山东省文化和旅游厅消息,为迎接第12个中国旅游日,山东将整合全省文旅资源,策划推出2022文化体验主...

2022-05-22 19:23:40

唐山加快验收时间 为建筑工地开复工保驾护航

唐山市住建局坚持两手抓、两手硬,统筹疫情防控和经济发展,想尽一切办法,简化一切手续,实现一路绿灯...

2022-03-19 15:15:42

消费者“身材焦虑” 减肥市场疯狂吸金

三月不减肥,四月徒伤悲。冬去春来之际,为了能穿上各种漂亮轻薄的服装,变得更瘦成为了许多人的追求,...

2022-03-19 15:14:49

2月份秦皇岛新建商品住宅销售价格环比下降0.2% 同比下降4%

3月16日,国家统计局公布2月份70个大中城市商品住宅销售价格变动情况,河北省入统的石家庄、唐山、秦皇...

2022-03-19 15:13:01

深圳技术进出口全年合同数量共1347项 同比增长2.51%

科技部火炬中心近日公布了2021年度全国技术合同交易数据。截至2021年12月31日,全国共登记技术合同67050...

2022-03-19 15:10:37

邢台柏乡:打造羊肚菌产业示范带 引领村级集体经济发展

我们通过打造食用菌产业高标准试验示范园,不仅盘活了闲置土地,还进一步增加了群众和村集体经济收入。...

2022-03-19 15:09:40

胡金秋32分17板 浙江广厦男篮“双杀”稠州金租

CBA浙江德比二番战昨晚开打,再度狭路相逢的浙江广厦男篮与浙江稠州金租男篮表现难分伯仲,比赛直到最后...

2022-03-19 15:07:37

新疆北部有降雪 湖北、湖南等地出现大雾

中新网12月13日电 据中央气象台网站消息,昨日8时至今日6时,内蒙古东北部、黑龙江东北部等地部分地区...

2021-12-13 08:35:21
x 广告
x 广告

Copyright ©  2015-2023 华夏经营网版权所有  备案号:琼ICP备2022009675号-37   联系邮箱:435 227 67@qq.com