vueプロジェクトパッケージaxiosおよび呼び出しapi自動グローバルloading、エラープロンプト
6762 ワード
前言
プロジェクトでは
また、私は多くの友达がまだこのようなコードを書いているのを見ています.
準備作業相対標準の は プロジェクトの OK、これから
パッケージaxios
ここはあまり話さないで,直接コードをつけた.
はい、実はグローバルなエラーのヒントは、上のコードの中で直接的な体現があって、ここではあまり話しません.そのグローバルな
まだ
storeを使用してloadingステータスを制御する
ここでは、storeに慣れてstoreのモジュール化を使用していると仮定します(もちろん、モジュール化しなくても構いません.あなた自身を見てください).
では、現在焦点は
では、残りのコードは、ここではあまり言いませんが、
たいてい、レイアウトレイヤでシャドウレイヤのloadingを位置決めし、requestLoadingの状態で表示の非表示を判断します(このように).
最終使用
ここでは言うまでもなく、第2部をカプセル化した
まとめ
以上の操作により、リクエスト期間中にloading効果が自動的に表示される2つのメリットがあります.エラーが発生した場合、グローバルにヒントが表示されます.
怠け者、すなわち行為が怠け者で、思考が怠け者ではない.
怠け者の行為こそ、思考を推進して怠け者を達成することができる...
間違って書いてあるところがあれば、どうぞ~
もっと良いアドバイスがあれば、伝言を歓迎します.
プロジェクトでは
loading
が使用され、一般的にjsで変数を変更したり、service
の方法を呼び出したりします.例えば、Element Ui
では、この2つの方法のloading
が提供され、このようにして優れた拡張性があります.BUT
、もしあなたがバックグラウンド管理プロジェクトをするならば、api
がこのようにコードを繰り返しなければなりません.emmm...
私は受け入れられません.私の怠け者がどのようにvue
プロジェクトの中で、自動グローバルのloading
をaxios
にパッケージしているかを見てみましょう.また、私は多くの友达がまだこのようなコードを書いているのを見ています.
/**
* , code、data、message
*/
api.http('url' , data).then(res => {
if (res.code === 200) {
//
} else {
// , , alert, , !
alert(res.message)
}
})
準備作業
vue
プロジェクトは、vue-cli
足場で構築することを選択することができる.axios
を導入し、理論的には直接npm install axios
である.src
ディレクトリの下にutils
ディレクトリを作成することをお勧めします.filter
、共通の方法などをファイルに分けて書くことができます.utils
ディレクトリの下にhttp.js
を作成します(どのように命名してもいいですが、面白いならいいです.勝手に~)http.js
にaxios
を封入する.パッケージaxios
ここはあまり話さないで,直接コードをつけた.
import axios from 'axios'
import store from '../store' // loading store
import { getToken } from '@/utils/auth' // , tooken
// axios
const service = axios.create({
// api base_url, , baseURL
// baseURL: process.env.BASE_API,
timeout: 15000, //
// headers , request
// headers: {'X-Custom-Header': 'foobar'}
})
// request
service.interceptors.request.use(config => {
// !!! loading !!!
store.dispatch('SetLoading', true)
// token header
getToken() && (config.headers['token'] = token)
// header
config.headers['deviceType'] = 'school_admin_web'
return config
},
error => {
const { response } = error
// ,
Promise.reject(error)
})
// respone
service.interceptors.response.use(
response => {
// !!! loading !!!
store.dispatch('SetLoading', false)
const res = response.data
if (res.code !== 200) {
// , else,
alert(res.message)
// alert
}
return response.data
},
error => {
// !!! loading !!!
store.dispatch('SetLoading', false)
const { response } = error
// ,
return Promise.reject(error)
}
)
export default service
はい、実はグローバルなエラーのヒントは、上のコードの中で直接的な体現があって、ここではあまり話しません.そのグローバルな
loading
の話は、ここではstore
のSetLoading
を呼び出しました.まだ
store
を使ったことがない場合は、自分でドキュメントを勉強してください.ここではstore
の詳細な説明はしません.storeを使用してloadingステータスを制御する
ここでは、storeに慣れてstoreのモジュール化を使用していると仮定します(もちろん、モジュール化しなくても構いません.あなた自身を見てください).
store
ディレクトリの下にapp module
があると仮定すると、app.js
に対応します.はい、上コード:const app = {
state: {
requestLoading: 0,
},
mutations: {
SET_LOADING: (state, boolean) => {
boolean ? ++state.requestLoading : --state.requestLoading
},
},
actions: {
SetLoading ({ commit }, boolean) {
commit('SET_LOADING', boolean)
},
},
}
export default app
axios
のパッケージコードと組み合わせて、axios
のrequest
ブロッカーの中で、私はstore SetLoading
を呼び出して、requestLoading
の数値を変えて、それを1に加算しました.response
ブロッカーでは、store SetLoading
を呼び出し、requestLoading
の数値を1から減らすように変更しました.その全体的な原理は,ごみ回収メカニズムに類似しており,複数のリクエストが同時に発生した場合,すべてのリクエストが結果を返すとloading
効果が消失するという利点がある.では、現在焦点は
store
下のapp
モジュールのrequestLoading
状態にあるだけで、loading
の効果を判断すればよい.では、残りのコードは、ここではあまり言いませんが、
たいてい、レイアウトレイヤでシャドウレイヤのloadingを位置決めし、requestLoadingの状態で表示の非表示を判断します(このように).
"app-main">
"request-loading" :class="{'request-loading-show' : requestLoading}">
"loading-module">
"fade-transform" mode="out-in">
import { mapGetters } from <span class="hljs-string">'vuex'</span>
<span class="hljs-built_in">export</span> default {
name: <span class="hljs-string">'AppMain'</span>,
computed: {
...mapGetters([
<span class="hljs-string">'requestLoading'</span>,
]),
},
}
// .request-loading-show , 。
最終使用
ここでは言うまでもなく、第2部をカプセル化した
axios import
を使用すればOKです.ここでは、src
の下にapi
ディレクトリを作成し、モジュールがすべてのapi
を定義することをお勧めします.例えば、import http from '@/utils/http'
export default {
add (data) {
return http({ url: '...', data: data, method: 'post' })
},
}
// ...
まとめ
以上の操作により、リクエスト期間中にloading効果が自動的に表示される2つのメリットがあります.エラーが発生した場合、グローバルにヒントが表示されます.
怠け者、すなわち行為が怠け者で、思考が怠け者ではない.
怠け者の行為こそ、思考を推進して怠け者を達成することができる...
間違って書いてあるところがあれば、どうぞ~
もっと良いアドバイスがあれば、伝言を歓迎します.