vue請(qǐng)求函數(shù)和路由的安裝使用過(guò)程
【5.0】vue請(qǐng)求函數(shù)和路由
此處是與后端交互發(fā)送請(qǐng)求拿到數(shù)據(jù),和vue自己中的頁(yè)面跳轉(zhuǎn)路由
【一】axios使用
【1】安裝
終端命令
npm install axios -S
【2】基本語(yǔ)法
axios.get('后端地址(django)').then(res => { console.log(res.data.results) if (res.data.code == 0) { //請(qǐng)求成功,執(zhí)行這里 } else { alert('失敗') } })
【3】axios請(qǐng)求成功,取數(shù)據(jù)
數(shù)據(jù)位置
.then(res => {console.log(res.data.results)... #真正有效的數(shù)據(jù)在res.data.results中
賦值方法
只要利用了結(jié)構(gòu)數(shù)據(jù)的對(duì)應(yīng)性
const film_list = reactive({'results': []}) const getfilm=()=>{ axios.get('http://127.0.0.1:8000/films/films/').then(res => { console.log(res.data) // film_list.results=res.data.results //解構(gòu)賦值 // Object.assign(film_list.results, res.data.results) //解構(gòu)賦值 // let {results,code,msg}=res.data // Object.assign(film_list.results, results) //解構(gòu)賦值 // let {data:{results}}=res // Object.assign(film_list.results, results) //解構(gòu)賦值 // let {data}=res // Object.assign(film_list, data) })}
【二】async和await
【1】介紹
- 兩者搭配,定義了一個(gè)攜程函數(shù),如果函數(shù)中有io操作,就寫(xiě)await,之前then中的值,可以直接復(fù)制給一個(gè)變量
- 其實(shí)就是并發(fā)的操作,先去發(fā)送請(qǐng)求,這邊也在等著接收數(shù)據(jù),如果成功了就把數(shù)據(jù)拿過(guò)來(lái),不成功就提示錯(cuò)誤,而不是一步等一步執(zhí)行
【2】使用
async function load() { //將需要執(zhí)行一會(huì)的函數(shù)變成wait let res = await axios.get('http://127.0.0.1:8000/films/films/') Object.assign(film_list.results, res.data.results) } load()
【3】使用二:有正確和錯(cuò)誤兩個(gè)路
下面的例子是套娃,func2是根據(jù)func1的結(jié)果進(jìn)行走的,同樣可以定義func3接收f(shuō)unc2的結(jié)果
async function fun1(){ return 10 } async function fun2(){ try{ let res = await fun1() //let res = await Promise.reject("something wrong") }catch(e){ console.log("catch got:"+e) } console.log("await got:"+res) } fun2()
【三】promise語(yǔ)法
【1】介紹
# 前端中的異步編程技術(shù),多線程+線程結(jié)果回調(diào)!
# Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強(qiáng)大。它由社區(qū)最早提出和實(shí)現(xiàn),ES6將其寫(xiě)進(jìn)了語(yǔ)言標(biāo)準(zhǔn),統(tǒng)一了用法,原生提供了Promise對(duì)象。
# 所謂Promise,簡(jiǎn)單說(shuō)就是一個(gè)容器,里面保存著某個(gè)未來(lái)才會(huì)結(jié)束的事件(通常是一個(gè)異步操作)的結(jié)果。從語(yǔ)法上說(shuō),Promise 是一個(gè)對(duì)象,從它可以獲取異步操作的消息。Promise 提供統(tǒng)一的 API,各種異步操作都可以用同樣的方法進(jìn)行處理。
# Promise對(duì)象有以下兩個(gè)特點(diǎn)。
(1)Promise對(duì)象代表一個(gè)異步操作,有三種狀態(tài):`Pending`(進(jìn)行中)、`Resolved`(已完成,又稱 Fulfilled)和`Rejected`(已失?。?。只有異步操作的結(jié)果,可以決定當(dāng)前是哪一種狀態(tài),任何其他操作都無(wú)法改變這個(gè)狀態(tài)。這也是`Promise`這個(gè)名字的由來(lái),它的英語(yǔ)意思就是“承諾”,表示其他手段無(wú)法改變。
(2)一旦狀態(tài)改變,就不會(huì)再變,任何時(shí)候都可以得到這個(gè)結(jié)果。Promise對(duì)象的狀態(tài)改變,只有兩種可能:從`Pending`變?yōu)閌Resolved`和從`Pending`變?yōu)閌Rejected`。只要這兩種情況發(fā)生,狀態(tài)就凝固了,不會(huì)再變了,會(huì)一直保持這個(gè)結(jié)果。
# 生活中案例
你跟你女朋友說(shuō),5年后等我賺夠500w就結(jié)婚--》定義函數(shù)? -1 進(jìn)行中(努力賺錢(qián),其他代碼繼續(xù)執(zhí)行)
? -2 成功(賺夠500w---》結(jié)婚)
? -3 失?。](méi)賺夠---》分手)
總結(jié):一個(gè)請(qǐng)求要轉(zhuǎn)一小會(huì),請(qǐng)求回來(lái)只有成功和不成功兩條路,我們可以預(yù)判,并給出兩條路,成功了resolve走一個(gè)代碼,失敗了reject和err走另一個(gè)代碼
【2】promise運(yùn)行的兩個(gè)結(jié)果
1.實(shí)例化promise對(duì)象,并且執(zhí)行(類似Java創(chuàng)建線程對(duì)象,并且start)
參數(shù): resolve,reject隨意命名,但是一般這么叫!
參數(shù): resolve,reject分別處理成功和失敗的兩個(gè)函數(shù)! 成功resolve(結(jié)果) 失敗reject(結(jié)果)
參數(shù): 在function中調(diào)用這里兩個(gè)方法,那么promise會(huì)處于兩個(gè)不同的狀態(tài)
狀態(tài): promise有三個(gè)狀態(tài)
pending 正在運(yùn)行
resolved 內(nèi)部調(diào)用了resolve方法
rejected 內(nèi)部調(diào)用了reject方法
參數(shù): 在第二步回調(diào)函數(shù)中就可以獲取對(duì)應(yīng)的結(jié)果
2.獲取回調(diào)函數(shù)結(jié)果 then在這里會(huì)等待promise中的運(yùn)行結(jié)果,但是不會(huì)阻塞代碼繼續(xù)運(yùn)行
【3】promise代碼
<script> //【1】函數(shù)編程了promise函數(shù),開(kāi)始初步執(zhí)行 let promise =new Promise(function(resolve,reject){ console.log("promise 開(kāi)始執(zhí)行") //執(zhí)行后的三個(gè)結(jié)果(此處可以放代碼,其運(yùn)行結(jié)果也就下面三種) throw new Error("error message") resolve("promise 執(zhí)行成功") reject("promise 執(zhí)行失敗") }) //【2】請(qǐng)求過(guò)去了,開(kāi)始等,并走下一步 console.log('11111') //【3】這邊是門(mén)口等待結(jié)果的 promise.then( function(value){console.log(`promise中執(zhí)行了resolve:${value}`)}, function(error){console.log(`promise中執(zhí)行了reject:${error}`)} ) //【4】其他代碼 console.log('222222') </script>
console.log("promise 開(kāi)始執(zhí)行") console.log('11111') console.log('222222') promise執(zhí)行成功或失敗打印的代碼
【4】catch情況
就是將上面then中成功和不成功的結(jié)果分開(kāi),then只走成功的,catch走不成功的
... promise.then( function(resolveValue){console.log(`promise中執(zhí)行了resolve:${resolveValue}`)} ).catch( function(error){console.log(error)} )
【三】async和promise搭配
【1】介紹
async函數(shù)的結(jié)果會(huì)變成promise對(duì)象,通過(guò)promise可以對(duì)兩種情況進(jìn)行接收成功了就走promise的then,不成功走promise的catch
【2】使用
先定義async類的函數(shù),在將函數(shù)賦給一個(gè)promise對(duì)象,接收它的執(zhí)行情況
async function fun1(){ //return 10 // 成功狀態(tài),走then //throw new Error("異常狀態(tài),走catch") //let promise = Promise.resolve("成功狀態(tài),走then") let promise = Promise.reject("失敗狀態(tài),走catch") return promise--(其實(shí)就是return正確和錯(cuò)誤的結(jié)果) } //將async對(duì)象賦值給promise對(duì)象 let promise =fun1() promise.then( function(value){ console.log("success:"+value) } ).catch( function(value){ console.log("fail:"+value) } )
【四】vue-router插件
如果在創(chuàng)建的時(shí)候沒(méi)有選擇router,可以安裝vue-router插件
安裝插件--創(chuàng)建router->index.js-->導(dǎo)入插件-->在main.js中使用
【1】安裝
# 1 需要使用 vue-router 4版本及以上
npm install -S vue-router@4
【2】路由跳轉(zhuǎn)
需要從vue-router導(dǎo)入,拿到這個(gè)類,然后實(shí)例化出router和route,可以對(duì)跳轉(zhuǎn)路徑和當(dāng)前路徑操作
import {useRouter, useRoute} from 'vue-router' let router=useRouter() --控制路徑跳轉(zhuǎn) let route=useRoute() --控制當(dāng)前的路徑
使用
router.push('path名')
【3】前置路由守衛(wèi)
router.beforeEach((to, from, next) => { //to 是目標(biāo)地包裝對(duì)象 .path屬性可以獲取地址 //from 是來(lái)源地包裝對(duì)象 .path屬性可以獲取地址 //next是方法,不調(diào)用默認(rèn)攔截! next() 放行,直接到達(dá)目標(biāo)組件 //next('/地址')可以轉(zhuǎn)發(fā)到其他地址,到達(dá)目標(biāo)組件前會(huì)再次經(jīng)過(guò)前置路由守衛(wèi) console.log(to.path, from.path, next) //需要判斷,注意避免無(wú)限重定向 if (to.name == 'home' || to.name == 'login') { next() } else { let token = localStorage.getItem('token') if (token) { next() } else { next('/login') } } })
【五】pinia任務(wù)管理器
【1】介紹
和vuex一樣,相當(dāng)于一個(gè)大容器和任務(wù)分配有專門(mén)存放數(shù)據(jù)的地方,有真正執(zhí)行函數(shù)的地方,和vuex相比少了一個(gè)任務(wù)分配的過(guò)程
【2】管理器語(yǔ)法
import {defineStore} from 'pinia' export const definedStore = defineStore( { id: 'storePinia', //必須唯一 state: () => { // state中用于定義數(shù)據(jù) return { ....}}, getters: {// 用于定義一些通過(guò)數(shù)據(jù)計(jì)算而得到結(jié)果的一些方法 一般在此處不做對(duì)數(shù)據(jù)的修改操作 }, actions: { // 用于定義一些對(duì)數(shù)據(jù)修改的方法 } } })
definedStore和id名字相關(guān)聯(lián),就類似一類人(用戶/商品這種),數(shù)據(jù)就可以分類存放在不同的任務(wù)管理器中了
【3】創(chuàng)建pinia對(duì)象
#### 2 main.js import {createApp} from 'vue' import './style.css' import App from './App.vue' import router from "./router"; // 導(dǎo)pinia import {createPinia} from 'pinia' // 創(chuàng)建pinia對(duì)象 let pinia = createPinia() createApp(App).use(router).use(pinia).mount('#app')
創(chuàng)建store文件夾
store --definedStore --definedGoods #不同的文件夾,是不同的任務(wù)管理器
#文件中,創(chuàng)造一個(gè)任務(wù)管理器 import {defineStore} from 'pinia' export const definedStore = defineStore( { id: 'storePinia', //必須唯一 state: () => { // state中用于定義數(shù)據(jù) return { ....}}, getters: {// 用于定義一些通過(guò)數(shù)據(jù)計(jì)算而得到結(jié)果的一些方法 一般在此處不做對(duì)數(shù)據(jù)的修改操作 }, actions: { // 用于定義一些對(duì)數(shù)據(jù)修改的方法 } } })
【六】elementui-plus
安裝
npm install element-plus -S
配置
import ElementPlus from 'element-plus' import 'element-plus/dist/index.css' createApp(App).use(router).use(pinia).use(ElementPlus).mount('#app')
使用
https://element-plus.org/zh-CN/component/popover.html
#直接從該地址復(fù)制粘貼即可
到此這篇關(guān)于vue請(qǐng)求函數(shù)和路由的文章就介紹到這了,更多相關(guān)vue請(qǐng)求函數(shù)和路由內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue3 onMounted異步函數(shù)同步請(qǐng)求async/await實(shí)現(xiàn)
- vue函數(shù)input輸入值請(qǐng)求時(shí)延遲1.5秒請(qǐng)求問(wèn)題
- Vue2的路由和異步請(qǐng)求方式
- Vue路由切換和Axios接口取消重復(fù)請(qǐng)求詳解
- vue路由切換時(shí)取消之前的所有請(qǐng)求操作
- vue路由攔截器和請(qǐng)求攔截器知識(shí)點(diǎn)總結(jié)
- vue路由導(dǎo)航守衛(wèi)和請(qǐng)求攔截以及基于node的token認(rèn)證的方法
- vue-resource請(qǐng)求實(shí)現(xiàn)http登錄攔截或者路由攔截的方法
相關(guān)文章
vue-quill-editor富文本編輯器上傳視頻功能詳解
需求需要實(shí)現(xiàn)富文本的功能,同時(shí)富文本中還可以上傳視頻和圖片,選來(lái)選去最后決定了用這個(gè)富文本編輯器,下面這篇文章主要給大家介紹了關(guān)于vue-quill-editor富文本編輯器上傳視頻功能的相關(guān)資料,需要的朋友可以參考下2023-05-05手把手教你如何運(yùn)行一個(gè)前端uniapp項(xiàng)目
這篇文章主要介紹了如何設(shè)置和運(yùn)行一個(gè)基于uni-app框架的項(xiàng)目,包括安裝必要的軟件、克隆項(xiàng)目并安裝依賴,以及如何使用HBuilderX進(jìn)行項(xiàng)目運(yùn)行和調(diào)試,需要的朋友可以參考下2025-01-01vue+echarts實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)更新
這篇文章主要為大家詳細(xì)介紹了vue+echarts實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)更新,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04基于vue-cli創(chuàng)建的項(xiàng)目的目錄結(jié)構(gòu)及說(shuō)明介紹
下面小編就為大家分享一篇基于vue-cli創(chuàng)建的項(xiàng)目的目錄結(jié)構(gòu)及說(shuō)明介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助2017-11-11vue 路由視圖 router-view嵌套跳轉(zhuǎn)的實(shí)現(xiàn)
這篇文章主要介紹了vue 路由視圖 router-view嵌套跳轉(zhuǎn),主要實(shí)現(xiàn)的內(nèi)容有制作一個(gè)登錄頁(yè)面,跳轉(zhuǎn)到首頁(yè),首頁(yè)包含菜單欄、頂部導(dǎo)航欄、主體,標(biāo)準(zhǔn)的后臺(tái)網(wǎng)頁(yè)格式,菜單點(diǎn)擊顯示不同的頁(yè)面,感興趣的小伙伴請(qǐng)參考下面文章內(nèi)容2021-09-09vue中設(shè)置height:100%無(wú)效的問(wèn)題及解決方法
這篇文章主要介紹了vue中設(shè)置height 100%無(wú)效的問(wèn)題及解決方法,需要的朋友可以參考下2018-07-07vue elementUI實(shí)現(xiàn)拖拽流程圖效果
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)vue elementUI實(shí)現(xiàn)拖拽流程圖效果,不引入插件,純手寫(xiě)實(shí)現(xiàn),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-01-01