电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

vue之封裝多個組件調(diào)用同一接口的案例

瀏覽:90日期:2022-12-10 09:01:03

背景:項(xiàng)目中有多個組件調(diào)用同一接口,為提高代碼可維護(hù)性,需要封裝公共方法

直接return 接口調(diào)用的結(jié)果

export function getAll() { let all = []; let opt = { method: ’get’, url: ’all/teacher’, success: res => { all = res.data.value || []; }, fail: err => { tipInfo(err.data.desc, ’提示’, false, ’warning’); } }; $http(opt); return all; } console.log(getAll()); // []

$http是在axios基礎(chǔ) 進(jìn)行封裝的,是一個異步的方法,所以在組件中調(diào)用getAll()方法,拿到的是一個空數(shù)組

使用promise進(jìn)行封裝

export function getAll() { return new Promise((resolve, reject) => { let opt = { method: ’get’, url: ’all/teacher’, success: res => { resolve(res.data.value || []); }, fail: err => { reject(err.data.desc); } }; $http(opt); }); } // 調(diào)用 getAll() .then(data => { console.log(data); // }) .catch(err => { this.tipInfo(err.data.desc, ’提示’, false, ’warning’); });

使用promise進(jìn)行封裝后,方法,不夠簡潔,達(dá)不到優(yōu)化的目的

使用回調(diào)函數(shù)進(jìn)行封裝

export function getAll(callback) { let opt = { method: ’get’, url: ’all/teacher’, success: res => { callback(res.data.value || []); }, fail: err => { tipInfo(err.data.desc, ’提示’, false, ’warning’); } }; $http(opt); } // 調(diào)用 getAllPark(data => { console.log(data); // 成功拿到數(shù)據(jù) });

補(bǔ)充知識:vue多個頁面用到同一個接口的數(shù)據(jù)( 比如名稱列表 ),使用 vuex

第一種: 調(diào)接口不傳參數(shù)

1、在 store文件夾下的 modules文件夾下新建 getName.js

// getName.jsimport { getNameList } from '@/apis/apis'; // 導(dǎo)入接口export default { state: { nameList: [] // 名稱列表 }, mutations: { changeNameList(state, payload) { state.nameList= payload; } }, actions: { geName(context) { getNameList ({}).then(res => { if (res.code == 0) { context.commit('changeNameList', res.data); } else { Message.error(res.message); } }); } }};

2、在 store文件夾下 index.js 中引入 getName.js

import getNamefrom './modules/getName';export default new Vuex.Store({ modules: { getName },});

3、在整個項(xiàng)目剛開始加載的時候就是用 dispatch 分發(fā),這樣就不管在哪個頁面需要使用到都可以使用

比如打開頁面首頁的時候,在mounted里面就 dispatch 觸發(fā)geName函數(shù)

<script>export default { mounted() { this.$store.dispatch(’geName’) },}

4、如在多個頁面都需要使用 nameList , 以在某一個頁面使用為例,其余頁面一樣用法

<template> <div> <el-select v-model='form.name' placeholder='請選擇名稱' clearable> <el-option v-for='item in nameList' :key='item.id' :label='item.fieldName' :value='item.fieldName'></el-option> </el-select> </div></template><script>export default { computed: { nameList() { return this.$store.state.getName.nameList } },}</script>

第二種: 調(diào)接口傳參數(shù)

import movieService from ’../services/movieService.js’export default { namespaced: true, state: { current: 1, pageSize: 2, total: 0, datas: [], isLoading: false }, mutations: { //改變狀態(tài)的通用方法 設(shè)置整個狀態(tài) setState(state, newState) { for (const prop in newState) {state[prop] = newState[prop] } } }, actions: { fetch(context) { // 根據(jù)當(dāng)前的分頁設(shè)置,獲取電影 context.commit('setState', { isLoading: true }) movieService.getMovies(context.state.current, context.state.pageSize).then(resp => {console.log(resp)context.commit('setState', resp)context.commit('setState', { isLoading: false }) }) } }}

// 在 movieService.jsexport default { async getMovies(page, pageSize) { const datas = await fetch('https://api.myjson.com/bins/15f8x1') .then(resp => resp.json()) return { total: datas.length, datas: datas.slice((page - 1) * pageSize, page * pageSize) //返回分頁的電影數(shù)據(jù) } }, //通過id獲取電影數(shù)據(jù) async getMovie(id) { const datas = await fetch('https://api.myjson.com/bins/15f8x1') .then(resp => resp.json()) return datas.find(item => item._id === id) }}

在頁面使用:

mounted() { //遠(yuǎn)程獲取數(shù)據(jù) this.$store.dispatch('movie/fetch') //出發(fā)vuex中movie.js里的action,獲取數(shù)據(jù) },

以上這篇vue之封裝多個組件調(diào)用同一接口的案例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: 过滤器_自清洗过滤器_气体过滤器_苏州华凯过滤技术有限公司 | 玉米深加工设备-玉米深加工机械-新型玉米工机械生产厂家-河南粮院机械制造有限公司 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 航拍_专业的无人机航拍摄影门户社区网站_航拍网 | 冷水机-工业冷水机-冷水机组-欧科隆品牌保障 | 骁龙云呼电销防封号系统-axb电销平台-外呼稳定『免费试用』 | 流量卡中心-流量卡套餐查询系统_移动电信联通流量卡套餐大全 | UV-1800紫外光度计-紫外可见光度计厂家-翱艺仪器(上海)有限公司 | 武汉天安盾电子设备有限公司 - 安盾安检,武汉安检门,武汉安检机,武汉金属探测器,武汉测温安检门,武汉X光行李安检机,武汉防爆罐,武汉车底安全检查,武汉液体探测仪,武汉安检防爆设备 | 专业甜品培训学校_广东糖水培训_奶茶培训_特色小吃培训_广州烘趣甜品培训机构 | 山东PE给水管厂家,山东双壁波纹管,山东钢带增强波纹管,山东PE穿线管,山东PE农田灌溉管,山东MPP电力保护套管-山东德诺塑业有限公司 | 湖南自考_湖南自学考试 | 防渗土工膜|污水处理防渗膜|垃圾填埋场防渗膜-泰安佳路通工程材料有限公司 | 液压油缸-液压缸厂家价格,液压站系统-山东国立液压制造有限公司 液压油缸生产厂家-山东液压站-济南捷兴液压机电设备有限公司 | 臭氧老化试验箱,高低温试验箱,恒温恒湿试验箱,防水试验设备-苏州亚诺天下仪器有限公司 | 氧氮氢联合测定仪-联测仪-氧氮氢元素分析仪-江苏品彦光电 | 中医治疗皮肤病_潍坊银康医院「山东」重症皮肤病救治平台 | 欧必特空气能-商用空气能热水工程,空气能热水器,超低温空气源热泵生产厂家-湖南欧必特空气能公司 | 高低温试验房-深圳高低温湿热箱-小型高低温冲击试验箱-爱佩试验设备 | 透平油真空滤油机-变压器油板框滤油机-滤油车-华之源过滤设备 | 糖衣机,除尘式糖衣机,全自动糖衣机,泰州市长江制药机械有限公司 体感VRAR全息沉浸式3D投影多媒体展厅展会游戏互动-万展互动 | 众能联合-提供高空车_升降机_吊车_挖机等一站工程设备租赁 | 专业深孔加工_东莞深孔钻加工_东莞深孔钻_东莞深孔加工_模具深孔钻加工厂-东莞市超耀实业有限公司 | 定时排水阀/排气阀-仪表三通旋塞阀-直角式脉冲电磁阀-永嘉良科阀门有限公司 | 济南律师,济南法律咨询,山东法律顾问-山东沃德律师事务所 | 电动高尔夫球车|电动观光车|电动巡逻车|电动越野车厂家-绿友机械集团股份有限公司 | 中天寰创-内蒙古钢结构厂家|门式刚架|钢结构桁架|钢结构框架|包头钢结构煤棚 | 镀锌角钢_槽钢_扁钢_圆钢_方矩管厂家_镀锌花纹板-海邦钢铁(天津)有限公司 | 尊享蟹太太美味,大闸蟹礼卡|礼券|礼盒在线预订-蟹太太官网 | 米顿罗计量泵(科普)——韬铭机械 | 土壤水分自动监测站-SM150便携式土壤水分仪-铭奥仪器 | 至顶网| 净化板-洁净板-净化板价格-净化板生产厂家-山东鸿星新材料科技股份有限公司 | 周口市风机厂,周鼓风机,河南省周口市风机厂 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 一体化污水处理设备,一体化污水设备厂家-宜兴市福源水处理设备有限公司 | 上海质量认证办理中心 | 镀锌方管,无缝方管,伸缩套管,方矩管_山东重鑫致胜金属制品有限公司 | 拉曼光谱仪_便携式|激光|显微共焦拉曼光谱仪-北京卓立汉光仪器有限公司 | 包装机传感器-搅拌站传感器-山东称重传感器厂家-济南泰钦电气 | 耳模扫描仪-定制耳机设计软件-DLP打印机-asiga打印机-fitshape「飞特西普」 |