网上讨论的文章已经很多了,这里举一个简单的例子来讨论一下 Composition API 的用法,具体问题才好具体讨论嘛。
假如我们要做一个论坛的讨论列表和分页,以前是把需要的数据都放在data里面,事件都放在methods 里面,代码少的话还好分辨,如果代码多了,看着就头疼了。
现在vue3.0可以按照业务关系分成多个管理类来管理这些代码。
比如帖子列表+发帖功能,我们先做一个模板:
(简单表示一下,不做美化处理了)
<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, ...... } }
写在单独的js文件里面,意味着可以复用。不仅这里可以用,其他的地方也可以直接拿过来用。好吧,这个表单基本没啥可以好复用的,这里只是举个例子。
总结
到此这篇关于vue3.0 的 Composition API 的一种使用方法的文章就介绍到这了,更多相关vue3.0 Composition API 内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持呐喊html" target="_blank">教程!
本文向大家介绍iconfont的三种使用方式详解,包括了iconfont的三种使用方式详解的使用技巧和注意事项,需要的朋友参考一下 在我们项目中经常要使用到iconfont,在此我们使用阿里巴巴矢量库提供的icon图标,此图标库足够为我们提供大量的图标,我们首先需要的事在阿里巴巴矢量图标库新建一个自己的账号,并且新建一个项目,这个项目包含了你所有要用到的图标。我们需要选中需要的图标放到自己的项目中
本文向大家介绍详解Vue中使用Echarts的两种方式,包括了详解Vue中使用Echarts的两种方式的使用技巧和注意事项,需要的朋友参考一下 1. 直接引入echarts 先npm安装echarts 开发: main.js 2、使用vue-echarts 先npm安装vue-echarts 开发: main.js 总结 以上所述是小编给大家介绍的Vue中使用Echarts的两种方式,希望对大家有
本文向大家介绍CodeIgniter中使用cookie的三种方式详解,包括了CodeIgniter中使用cookie的三种方式详解的使用技巧和注意事项,需要的朋友参考一下 cookie在php程序设计中应用十分广泛,本文所述CodeIgniter中使用cookie主要有以下三种方式,读者可以根据自身项目需求酌情采用。 第一种方式:采用php原生态的方法设置的cookie的值 第二种方式:通过CI框
本文向大家介绍vue中组件的3种使用方式详解,包括了vue中组件的3种使用方式详解的使用技巧和注意事项,需要的朋友参考一下 前言 组件是Vue.js最强大的功能之一。组件可以扩展HTML元素,封装可重用的代码。 在vue angular react三大前端框架的大前端时代。许多人选择了vue,在 github 上的star,vue已经超过react的数量了。虽然star并不能代表vue更强,不过在
本文向大家介绍详解Swift model 解析的两种方法,包括了详解Swift model 解析的两种方法的使用技巧和注意事项,需要的朋友参考一下 详解Swift model 解析的两种方法 1. 常规解析方法 model 2. 利用swift自有的函数进行解析-------推荐 如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
本文向大家介绍详解Java解析XML的四种方法,包括了详解Java解析XML的四种方法的使用技巧和注意事项,需要的朋友参考一下 XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这里面包括的内容有DOM(Document Object Model),DTD(Document