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