国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目次
uni-app インターフェイス、グローバル メソッドのカプセル化
vue3 インターフェイス リクエストのカプセル化
ホームページ ウェブフロントエンド Vue.js uni-app vue3 インターフェイスリクエストをカプセル化する方法

uni-app vue3 インターフェイスリクエストをカプセル化する方法

May 11, 2023 pm 07:28 PM
uni-app vue3

uni-app インターフェイス、グローバル メソッドのカプセル化

1. ルート ディレクトリに API ファイルを作成し、api フォルダーに api.js、baseUrl.js、および http.js ファイルを作成します

uni-app vue3 インターフェイスリクエストをカプセル化する方法

2.baseUrl.js ファイル コード

export default "https://XXXX.test03.qcw800.com/api/"

3.http.js ファイル コード

export function https(opts, data) {
	let httpDefaultOpts = {
		url: opts.url,
		data: data,
		method: opts.method,
		header: opts.method == 'get' ? {
			'X-Requested-With': 'XMLHttpRequest',
			"Accept": "application/json",
			"Content-Type": "application/json; charset=UTF-8"
		} : {
			'X-Requested-With': 'XMLHttpRequest',
			'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
		},
		dataType: 'json',
	}
	let token = uni.getStorageSync('token');
	if (token != undefined && token != null && token != '') {
		httpDefaultOpts.header.Authorization = 'Bearer ' + token;
	}
	let promise = new Promise(function(resolve, reject) {
		uni.request(httpDefaultOpts).then(
			(res) => {
				// console.log(res, '成功')
				if(res.statusCode == 401){
					uni.clearStorageSync();
				}
				resolve(res)
			}
		).catch(
			(response) => {
				// console.log(response, '失敗')
				reject(response)
			}
		)
	})
	return promise
}

4.api.js ファイル コード

export const rootUrl="https://ssss.test03.qcw800.com";  //其他接口域名
export const baseUrl= rootUrl + "api/";
export const api = {
	// 獲取驗(yàn)證碼
	guest:{ 
		url: rootUrl + '/api/public/guest',
		method: 'GET'
	},
	// 登錄
	login:{  
		url: rootUrl + '/api/user/login',
		method: 'GET'
	}
}

5.interface ファイルを main.js ファイルに導(dǎo)入します

import App from './App'
// #ifndef VUE3
import Vue from 'vue'
Vue.config.productionTip = false;  //設(shè)置為 false ,可以阻止 vue 在啟動(dòng)時(shí)生成生產(chǎn)提示
App.mpType = 'app'
const app = new Vue({
	...App
})
app.$mount()
// #endif
// #ifdef VUE3
import {
	createSSRApp
} from 'vue'
import {
	toast,
	nav,
	checkMobile,
	onuploadFile
} from '@/api/functions.js'
import {
	api,
	rootUrl
} from '@/api/api.js' // API 鏈接
import {
	https
} from '@/api/http.js' // 請(qǐng)求方式中間件
import navigationBar from '@/components/navigationBar.vue'
import publicContext from '@/components/publicContext.vue'
export function createApp() {
	const app = createSSRApp(App)
	app.component('navigationBar', navigationBar);
	app.component('publicContext', publicContext);
	app.config.globalProperties.$toast = toast;
	app.config.globalProperties.$nav = nav;
	app.config.globalProperties.$add = add;
	app.config.globalProperties.$checkMobile = checkMobile;
	app.config.globalProperties.$isEmpty = isEmpty;
	app.config.globalProperties.$formatFloat = formatFloat;
	app.config.globalProperties.$api = api;
	app.config.globalProperties.$rootUrl = rootUrl;
	app.config.globalProperties.$http = https;
	app.config.globalProperties.$imgUrl = 'https://qianchao-sheke.oss-cn-hangzhou.aliyuncs.com/'
	return {
		app
	}
}
// #endif

6.Interface request

this.$http(this.$api.messageList,{
					api_token:uni.getStorageSync('token'),
					pageSize:10,
                    page:1
				}).then(res=>{
					console.log(res,'返回參數(shù)');
				})

さらに、カプセル化されたグローバル メソッドが 5 番目の main ファイルに導(dǎo)入されています。上の手順、

export function toast(title){
	uni.showToast({
		icon:'none',
		title:title,
		position:'bottom',
	})
}
//校驗(yàn)手機(jī)格式 
export function checkMobile(mobile){
	return RegExp(/^1[34578]\d{9}$/).test(mobile);
}
export function nav(url,type=0){
	if(type == 0){
		uni.navigateTo({
			url:url
		})
	}else if(type == 1){
		uni.switchTab({
			url:url
		})
	}else if(type == 3){
		uni.navigateBack({
		})
	}else if(type == 4){
		uni.redirectTo({
			url: url
		});
	}else if(type == 5){
		uni.reLaunch({
			url
		});
	}
}
// 上傳圖片
export function onuploadFile(){
	var _this = this;
	uni.chooseImage({
		count: 1, //默認(rèn)9
		sizeType: ['original', 'compressed'],
		sourceType: ['album', 'camera'],
		success: (res) => {
			// console.log(res.tempFilePaths,'圖片的本地文件路徑列表',_this.$rootUrl);
			uni.uploadFile({
				url: _this.$rootUrl +'/api/public/upload',//上傳圖片的地址
				filePath: res.tempFilePaths[0],//這里是圖片的本地文件路徑列表(選擇圖片成功的時(shí)候可以拿到,在上邊的success回調(diào)中res.tempFilePaths即可拿到)
				name: 'file',//上傳的名字叫啥都行
				// headers: {
				// 	accessToken:'' //可以設(shè)置你的請(qǐng)求頭的token噢
				// },
				success(res) {
					//上傳成功的回調(diào)
					// console.log('上傳成功',res)
					var data = JSON.parse(res.data);
					return data.data[0];
				},
				fail(err){
					console.log(err,'上傳失敗');
				},
				complete(result){
					console.log(result,'上傳結(jié)果');
				}
			})
		}
	});
}

vue3 インターフェイス リクエストのカプセル化

1. プロジェクトに axios をインストールします

npm install --save axios vue-axios

2. リクエスト フォルダー、index.js および api.js を以下に作成しますsrc フォルダー ファイル

uni-app vue3 インターフェイスリクエストをカプセル化する方法

3.index.js ファイル コード

import axios from "axios";//創(chuàng)建一個(gè)axios的對(duì)象
import { useRouter } from "vue-router";
import { inject } from "vue";
//生成一個(gè)axios的實(shí)例
const http=axios.create({
	baseURL:"https://xxxx.test03.qcw800.com",// baseURL會(huì)在發(fā)送請(qǐng)求的時(shí)候拼接在url參數(shù)前面
	timeout:6000,//請(qǐng)求超時(shí)
});
// http.defaults.headers['api_token'] = localStorage.getItem('token') || '' //在請(qǐng)求頭中傳入token
http.interceptors.request.use(config => { 
    // console.log(config,'請(qǐng)求攔截');
  return config;
}, err => { 
  return Promise.reject(err)
})
//響應(yīng)攔截器
http.interceptors.response.use(response => {
	//console.log(response,'響應(yīng)攔截');
	return response;
  }, err => { 
	return Promise.reject(err)
  })
export default http;//導(dǎo)出

4.api.js ファイル コード

//導(dǎo)入request.js
import request from "@/request/index";
//登錄
export const login = (params) => request.get("/api/user/login",{params});
//獲取個(gè)人信息
export const userDetail = (params) => request.get("/api/user/detail",{params});
//方法二 在api文件里出來異步請(qǐng)求
// export const getCategory=async()=>{
// 	const res=await request.get(`/category/`);
// 	return res.data;
// };

5.インターフェイス リクエスト

<script>
import { defineComponent,onMounted } from &#39;vue&#39;
import { userDetail } from &#39;@/request/api&#39;
export default defineComponent({
  setup() {
    onMounted(()=>{
      userDetail({api_token:localStorage.getItem(&#39;token&#39;)}).then(res=>{
            console.log(res,&#39;個(gè)人信息&#39;);
        })
    })
  }
})
</script>

わかりましたか? !

クロスドメインの問題は後で解決します。プロキシ コード

const { defineConfig } = require(&#39;@vue/cli-service&#39;)
module.exports = defineConfig({
  transpileDependencies: true,
  devServer: {
    port: 8080, // 端口號(hào)
    open: false, //配置是否自動(dòng)啟動(dòng)瀏覽器
    https: false,// https:{type:Boolean}是否啟用https
    proxy: {
      // 代理
      "/api": {
        target: "https://xxxx.test03.qcw800.com",     //要代理訪問的路徑
        changeOrigin: true,//開啟代理:在本地會(huì)創(chuàng)建一個(gè)虛擬服務(wù)端,然后發(fā)送請(qǐng)求的數(shù)據(jù),并同時(shí)接收請(qǐng)求的數(shù)據(jù),這樣服務(wù)端和服務(wù)端進(jìn)行數(shù)據(jù)的交互就不會(huì)有跨域問題
        ws: true,//是否啟用websockets,用不到可設(shè)為false
        pathRewrite: {
          "^/api": ""//這里理解成用&#39;/api&#39;代替target里面的地址,比如我要調(diào)用&#39;http://192.168.0.45:8088/user/getuserlist&#39;,直接寫&#39;/api/user/getuserlist&#39;即可
        }
      }
    }
  },
})

以上がuni-app vue3 インターフェイスリクエストをカプセル化する方法の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Vue3 でページの部分的なコンテンツを更新する方法 Vue3 でページの部分的なコンテンツを更新する方法 May 26, 2023 pm 05:31 PM

ページの部分的な更新を?qū)g現(xiàn)するには、ローカル コンポーネント (dom) の再レンダリングを?qū)g裝するだけで済みます。 Vue でこの効果を?qū)g現(xiàn)する最も簡単な方法は、v-if ディレクティブを使用することです。 Vue2 では、v-if 命令を使用してローカル dom を再レンダリングすることに加えて、新しい空のコンポーネントを作成することもできます。ローカル ページを更新する必要がある場合は、この空のコンポーネント ページにジャンプしてから、再びジャンプします。 beforeRouteEnter ガードを空白のコンポーネントに配置します。元のページ。以下の図に示すように、Vue3.X の更新ボタンをクリックして赤枠內(nèi)の DOM を再読み込みし、対応する読み込みステータスを表示する方法を示します。 Vue3.X の scriptsetup 構(gòu)文のコンポーネントのガードには o しかないので、

Vue3 がマークダウンを解析し、コードのハイライトを?qū)g裝する方法 Vue3 がマークダウンを解析し、コードのハイライトを?qū)g裝する方法 May 20, 2023 pm 04:16 PM

Vue はブログ フロントエンドを?qū)g裝しており、マークダウン解析を?qū)g裝する必要があり、コードがある場合はコードのハイライトを?qū)g裝する必要があります。 Vue には、markdown-it、vue-markdown-loader、marked、vue-markdown など、マークダウン解析ライブラリが多數(shù)あります。これらのライブラリはすべて非常に似ています。ここではMarkedが使用され、コード強(qiáng)調(diào)表示ライブラリとしてhighlight.jsが使用されます。 1. 依存ライブラリをインストールする vue プロジェクトの下でコマンド ウィンドウを開き、次のコマンド npminstallmarked-save//marked を入力して、マークダウンを htmlnpmins に変換します。

vue3+vite: src に畫像を動(dòng)的にインポートするために require を使用するときのエラーを解決する方法 vue3+vite: src に畫像を動(dòng)的にインポートするために require を使用するときのエラーを解決する方法 May 21, 2023 pm 03:16 PM

vue3+vite:src は、イメージとエラー レポートと解決策を動(dòng)的にインポートするために require を使用します。vue3+vite は複數(shù)のイメージを動(dòng)的にインポートします。vue3。TypeScript 開発を使用している場合、イメージを?qū)毪工毪郡幛?require のエラー メッセージが表示されます。requireisnotdefined は使用できません。 vue2 のような imgUrl:require(' .../assets/test.png') は、typescript が require をサポートしていないため、インポートされます。そのため、import が使用されます。解決方法は次のとおりです: awaitimport を使用します

vue3 プロジェクトで tinymce を使用する方法 vue3 プロジェクトで tinymce を使用する方法 May 19, 2023 pm 08:40 PM

tinymce はフル機(jī)能のリッチ テキスト エディター プラグインですが、tinymce を vue に導(dǎo)入するのは他の Vue リッチ テキスト プラグインほどスムーズではありません。tinymce 自體は Vue には適しておらず、@tinymce/tinymce-vue を?qū)毪工氡匾ⅳ辘蓼?。外國のリッチテキストプラグインであり、中國語版を通過していないため、公式 Web サイトから翻訳パッケージをダウンロードする必要があります (ファイアウォールをバイパスする必要がある場合があります)。 1. 関連する依存関係をインストールします npminstalltinymce-Snpminstall@tinymce/tinymce-vue-S2. 中國語パッケージをダウンロードします 3. スキンと中國語パッケージを?qū)毪筏蓼? プロジェクトのパブリック フォルダーに新しい tinymce フォルダーを作成し、

Vue3 でアバターを選択してトリミングする方法 Vue3 でアバターを選択してトリミングする方法 May 29, 2023 am 10:22 AM

最終的な効果は、VueCropper コンポーネントのyarnaddvue-cropper@next をインストールすることです。上記のインストール値は Vue3 用です。Vue2 の場合、または他の方法を參照したい場合は、公式 npm アドレス: 公式チュートリアルにアクセスしてください。また、コンポーネント內(nèi)で參照して使用するのも非常に簡単です。必要なのは、対応するコンポーネントとそのスタイル ファイルを?qū)毪工毪长趣坤堡扦埂¥长长扦膝哎愆`バルに參照しませんが、import{userInfoByRequest}from'../js/api を?qū)毪工毪坤堡扦埂?' コンポーネント ファイルにインポートします。import{VueCropper}from'vue-cropper&

vue3+ts+axios+pinia を使用して無意味なリフレッシュを?qū)g現(xiàn)する方法 vue3+ts+axios+pinia を使用して無意味なリフレッシュを?qū)g現(xiàn)する方法 May 25, 2023 pm 03:37 PM

vue3+ts+axios+pinia で無意味なリフレッシュを?qū)g現(xiàn) 1. まず、プロジェクト內(nèi)の aiXos と pinianpmipinia をダウンロードします--savenpminstallaxios--save2. axios リクエストをカプセル化-----ダウンロード js-cookienpmiJS-cookie-s// aixosimporttype{AxiosRequestConfig , AxiosResponse}from"axios";importaxiosfrom'axios';import{ElMess

vue3 プロジェクトをパッケージ化してサーバーに公開した後、アクセス ページが空白で表示される問題の解決方法 vue3 プロジェクトをパッケージ化してサーバーに公開した後、アクセス ページが空白で表示される問題の解決方法 May 17, 2023 am 08:19 AM

vue3 プロジェクトがパッケージ化され、サーバーに公開されると、アクセス ページに空白の 1 が表示されます。vue.config.js ファイル內(nèi)の publicPath は次のように処理されます: const{defineConfig}=require('@vue/cli-service') module.exports=defineConfig({publicPath :process.env.NODE_ENV==='production'?'./':'/&

Vue3 の再利用可能なコンポーネントの使用方法 Vue3 の再利用可能なコンポーネントの使用方法 May 20, 2023 pm 07:25 PM

はじめに vue であれ、react であれ、複數(shù)の繰り返しコードに遭遇した場合、ファイルを冗長なコードの束で埋めるのではなく、これらのコードを再利用する方法を考えます。実際、vue と React はどちらもコンポーネントを抽出することで再利用を?qū)g現(xiàn)できますが、小さなコードの斷片に遭遇し、別のファイルを抽出したくない場合は、それに比べて、React は同じファイル內(nèi)で対応するウィジェットを宣言して使用できます。または、次のような renderfunction を通じて実裝します。 constDemo:FC=({msg})=>{returndemomsgis{msg}}constApp:FC=()=>{return(

See all articles