成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

vue之封裝多個組件調用同一接口的案例

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

背景:項目中有多個組件調用同一接口,為提高代碼可維護性,需要封裝公共方法

直接return 接口調用的結果

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基礎 進行封裝的,是一個異步的方法,所以在組件中調用getAll()方法,拿到的是一個空數組

使用promise進行封裝

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); }); } // 調用 getAll() .then(data => { console.log(data); // }) .catch(err => { this.tipInfo(err.data.desc, ’提示’, false, ’warning’); });

使用promise進行封裝后,方法,不夠簡潔,達不到優化的目的

使用回調函數進行封裝

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); } // 調用 getAllPark(data => { console.log(data); // 成功拿到數據 });

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

第一種: 調接口不傳參數

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

// getName.jsimport { getNameList } from '@/apis/apis'; // 導入接口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、在整個項目剛開始加載的時候就是用 dispatch 分發,這樣就不管在哪個頁面需要使用到都可以使用

比如打開頁面首頁的時候,在mounted里面就 dispatch 觸發geName函數

<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>

第二種: 調接口傳參數

import movieService from ’../services/movieService.js’export default { namespaced: true, state: { current: 1, pageSize: 2, total: 0, datas: [], isLoading: false }, mutations: { //改變狀態的通用方法 設置整個狀態 setState(state, newState) { for (const prop in newState) {state[prop] = newState[prop] } } }, actions: { fetch(context) { // 根據當前的分頁設置,獲取電影 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) //返回分頁的電影數據 } }, //通過id獲取電影數據 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() { //遠程獲取數據 this.$store.dispatch('movie/fetch') //出發vuex中movie.js里的action,獲取數據 },

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

標簽: Vue
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
狠狠色丁香久久婷婷综合_中| 久久只精品国产| 久久综合久久综合九色| 国产一区欧美一区| 欧美亚洲免费在线一区| 五月婷婷激情综合| 一本一本久久| 亚洲欧美电影一区二区| 亚洲国产婷婷香蕉久久久久久99| 欧美极品xxx| 欧美日本国产| 精品国产亚洲在线| 一区二区三区在线视频免费| 亚洲视频福利| 最近日韩中文字幕| 亚洲高清毛片| 亚洲免费观看高清完整版在线观看熊| 黑丝一区二区三区| 国产免费成人在线视频| 色综合久久中文综合久久97| 精品福利一二区| 不卡在线观看av| 久久久天堂av| 欧美91大片| 国产精品天天摸av网| 国产精品v亚洲精品v日韩精品| 国产喷白浆一区二区三区| 欧美精品九九| 国产精品三级av| 亚洲东热激情| 亚洲一区视频在线| 色诱亚洲精品久久久久久| 免费精品视频在线| 欧美丰满美乳xxx高潮www| 国产一区 二区 三区一级| 欧美久久久影院| 福利电影一区二区| 久久综合久久鬼色中文字| 风间由美一区二区av101| 精品国内二区三区| 欧美激情麻豆| 一区免费观看视频| 亚洲一区观看| 免费的成人av| 8v天堂国产在线一区二区| 成人黄色小视频| 久久久久国色av免费看影院| 国产一区二区三区四区hd| 亚洲另类一区二区| 色一情一乱一乱一91av| 国产乱淫av一区二区三区| 日韩免费观看高清完整版在线观看| 99精品国产91久久久久久 | 精品不卡一区| 一区二区欧美视频| 欧美三日本三级三级在线播放| 成人精品鲁一区一区二区| 国产精品三级av在线播放| 免费一级欧美片在线播放| 国模娜娜一区二区三区| 久久久久久免费毛片精品| 99精品国产在热久久婷婷| 蜜桃视频在线一区| 久久综合九色综合97婷婷女人| 亚洲国产激情| 久久精品国产秦先生| 精品av综合导航| 中文一区在线| 国产伦理精品不卡| 亚洲国产高清在线| 久久久久国产精品一区三寸| 美女精品自拍一二三四| 久久婷婷久久一区二区三区| 国产精品老牛| 国产成人免费视频网站高清观看视频| 国产精品视频第一区| 91黄色免费看| 欧美成人综合| 蜜臀av在线播放一区二区三区| 久久网站热最新地址| 性一交一乱一区二区洋洋av| 国产mv日韩mv欧美| 亚洲激情在线播放| 欧美高清你懂得| 99热这里都是精品| 亚洲成人av一区二区三区| 精品伦理精品一区| 免费看的黄色欧美网站| 国产激情视频一区二区三区欧美 | 亚洲欧洲国产专区| 欧美日韩亚洲不卡| 国内不卡一区二区三区| 另类调教123区| 中文字幕一区三区| 3atv一区二区三区| 中日韩男男gay无套| 国产成人高清在线| 夜夜嗨av一区二区三区| 亚洲精品一区在线观看| 色天天综合色天天久久| 欧美精品系列| 精品一区二区av| 亚洲欧美一区二区三区国产精品 | 一区二区三区四区五区视频在线观看| 7777精品久久久大香线蕉| 国产精品sss| 国产一区二区视频在线| 亚洲精品乱码久久久久久| 日韩美女天天操| 在线观看精品一区| 亚洲国产一区二区三区高清| 国产成人av一区二区三区在线| 亚洲国产婷婷综合在线精品| 久久久99精品久久| 欧美日韩国产小视频在线观看| 99在线精品免费视频九九视| av一区二区三区黑人| 卡一卡二国产精品| 亚洲一区中文日韩| 亚洲国产高清aⅴ视频| 欧美一卡二卡在线观看| 色综合久久88色综合天天| 极品av少妇一区二区| 成人精品视频一区| 免费看欧美美女黄的网站| 亚洲欧洲一区二区三区| 欧美大度的电影原声| 91国偷自产一区二区开放时间| 91亚洲精品乱码久久久久久蜜桃| 久久精品国产亚洲高清剧情介绍| 亚洲精品国久久99热| 国产亚洲午夜高清国产拍精品 | 8v天堂国产在线一区二区| 国产欧美日韩一区二区三区| 91猫先生在线| 国产精品99久久久久| 日韩中文字幕麻豆| 亚洲精品菠萝久久久久久久| 日本一区二区成人在线| 精品国产123| 日韩一级完整毛片| 欧美日韩在线免费视频| 麻豆成人精品| 99re热精品| 欧美视频观看一区| 99久久精品国产观看| 国产精品一区二区久久精品爱涩| 欧美aa在线视频| 又紧又大又爽精品一区二区| 欧美极品aⅴ影院| 久久影院午夜论| 日韩欧美视频一区| 91精品在线一区二区| 精品视频在线视频| 色琪琪一区二区三区亚洲区| 亚洲综合精品四区| 国产欧美亚洲一区| aa亚洲婷婷| 影音先锋日韩资源| 亚洲国产二区| 精品1区2区| 精品不卡一区| 伊人蜜桃色噜噜激情综合| 欧美一区1区三区3区公司| av亚洲精华国产精华精华| 成人免费毛片a| 国产成人a级片| 成人av资源在线观看| 成人一级片网址| 丁香六月综合激情| 成人污视频在线观看| 成人污污视频在线观看| 粉嫩av一区二区三区| 国产91综合一区在线观看| 国产精品77777| 国产盗摄精品一区二区三区在线| 国产福利一区二区三区视频在线 | 日本中文字幕一区| 日本不卡视频在线观看| 五月激情丁香一区二区三区| 婷婷丁香激情综合| 手机精品视频在线观看| 婷婷成人激情在线网| 爽好多水快深点欧美视频| 日本一道高清亚洲日美韩| 久久精品国产99久久6| 精品亚洲成av人在线观看| 国产一区视频在线看| 国产伦精一区二区三区| 成人午夜免费电影| 91麻豆免费视频| 激情久久久久久久| 国产精品手机视频| 久久中文在线| 精品视频在线视频| 日韩三级高清在线| 国产女人水真多18毛片18精品视频| 成人欧美一区二区三区| 亚洲一区二区三区视频在线| 日韩中文字幕1|