当前位置: 首页 > Web前端 > vue.js

Vue+alova入门指南

时间:2023-04-01 11:28:32 vue.js

alova?这到底是什么?你没听说过这很正常。是一个RSM实现库,用于解决MVVM项目下不同请求场景下的问题,也可以帮助你管理服务器状态。它就像一座axios军械库,为axios插上了翅膀。想了解更多RSM可以参考RSM:超实用的多场景请求管理解决方案这篇文章作为vue+alova的基础介绍。可以学习到:alova如何处理频繁请求,跨模块更新服务器状态,模糊搜索alovavue项目下如何帮助管理服务器状态alova流畅使用方法在接下来的入门指南中,我们将把todo以items(todo)为例,重点介绍获取不同日期的todo列表和查看todo详情,讲解创建、编辑、删除items的需求!Alova安装:npminstallalova--save-dev初始化一个alova实例一个alova实例是使用的开始,所有的请求都需要从它开始。它的写法和axios类似,下面是最简单的创建alova实例的方法。import{createAlova}from'alova';importGlobalFetchfrom'alova/GlobalFetch';importVueHookfrom'alova/vue';constalovaInstance=createAlova({//假设我们需要和这个域名的服务器进行交互baseURL:'https://api.todo.com',//在vue项目下引入VueHook,它可以帮助我们使用vue的ref函数创建请求相关的状态,这些状态可以由alova管理statesHook:VueHook,//requestadapter,这里我们使用fetch请求适配器requestAdapter:GlobalFetch(),//设置一个全局的请求拦截器,类似于axiosbeforeRequest(config){//假设我们需要在请求头中添加tokenconfig.headers.token='token';},//响应拦截器,也类似于axiosasyncresponded(response,config)=>{constjson=awaitresponse.json();if(json.code!==200){//这里抛出错误时,它会进入请求失败拦截器中thrownewError(json.message);}returnjson.data;},});todolist——直接使用alova管理的state进行界面渲染。我们在此演示中的界面如下所示。我们使用useRequest发送请求,这是页面获取初始化数据最常用的方法。consttodoListGetter=alovaInstance.Get('/todo/list');const{//loading是加载状态值,加载时为true,结束后自动更新为false//是一个Ref类型的值,可以通过loading.value访问,也可以直接绑定到接口上loading,//响应数据data:todoList,//请求错误对象,请求错误时有值,否则为未定义错误,//成功回调绑定onSuccess,//失败回调绑定onError,//完成回调bindingonComplete,//直接传入Method对象发送请求}=useRequest(todoListGetter,{//初始数据initialData:[],});//######回调设置onSuccess(todoListRaw=>{console.log('请求成功,响应数据为:',todoListRaw);});onError(error=>{console.log('请求失败,错误信息为:',error);});onComplete(()=>{console.log('请求完成,无论成功失败都会调用');});接下来,我们将todoList渲染到渲染界面,完成!正在加载...

{{错误。消息}}
{{todo.title}}
{{todo.startTime}}到{{todo.endTime}}
todo编辑页面-经常请求的数据用作内存缓存编辑页面。这里我们需要考虑用户在几秒内多次点击todo项查看的场景。每次进去都要请求服务器,有点浪费。此时,我们可以做一层前端缓存,提高显示速度,减轻服务器压力consttodoDetail=id=>alovaInstance.Get(`/todo/${id}`,{//设置一个5分钟的本地内存缓存,刷新后会失效localeCache:5*60*1000,});const{loading,//响应数据data:todoDetail,error,}=useRequest(todoDetail(params.id));页面渲染代码loading...提交数据数据提交代码——手动更新todo列表数据constcreateTodoPoster=newTodo=>alova.Post('/todo',newTodo);const{loading,data,error,//functionformanualsenderrequest,sendrequestaftercallingsend:submitTodo,}=useRequest(()=>createTodoPoster(todoDetail.value),{//当immediate为false时,没有请求将在初始化期间发送immediate:false});//手动发送请求consthandleAddTodo=()=>{submitTodo().then(result=>{//更新列表数据,获取todo列表的状态,返回更新后的数据updateState(todoDetail(params.id),todoListData=>{constindex=todoListData.findIndex(({id})=>id===params.id);todoListData[index]=todoDetail.value;returntodoListData;});}).catch(error=>{console.log('添加todo项失败,报错messageis:',error);});};模糊搜索todo项的模糊搜索功能是在输入关键字的过程中不断发出请求。为了提升用户体验,减轻服务器压力,我们需要实现搜索防抖。实现代码如下:constsearchTodo=keyword=>alovaInstance.Get(`/todo?keyword=${keyword}`);//通过useWatcher监听关键字变化,const关键字变化后自动重新发出请求=ref('');const{loading,data,}=useWatcher(()=>searchTodo(keyword.value),[keyword],{debounce:500,//设置500毫秒防抖});这样就实现了带防抖的模糊搜索功能。综上所述,本期入门指南到此结束,vue+alova的基本用法也涵盖了。大家也可以试试,欢迎在评论区交流问题。