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ù),多線(xiàn)程+線(xiàn)程結(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`(已完成,又稱(chēng) 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í)行(類(lèi)似Java創(chuàng)建線(xiàn)程對(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類(lèi)的函數(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è)類(lèi),然后實(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ù)分配有專(zhuān)門(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),就類(lèi)似一類(lèi)人(用戶(hù)/商品這種),數(shù)據(jù)就可以分類(lèi)存放在不同的任務(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)目并安裝依賴(lài),以及如何使用HBuilderX進(jìn)行項(xiàng)目運(yùn)行和調(diào)試,需要的朋友可以參考下2025-01-01
vue+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-11
vue 路由視圖 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-09
vue中設(shè)置height:100%無(wú)效的問(wèn)題及解決方法
這篇文章主要介紹了vue中設(shè)置height 100%無(wú)效的問(wèn)題及解決方法,需要的朋友可以參考下2018-07-07
vue elementUI實(shí)現(xiàn)拖拽流程圖效果
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)vue elementUI實(shí)現(xiàn)拖拽流程圖效果,不引入插件,純手寫(xiě)實(shí)現(xiàn),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-01-01

