做网站数据库怎么做,网络营销网课,珠海企业建站,炒股配资网站建设一、前言
在学习vue框架中#xff0c;总是有些知识不是很熟悉#xff0c;又不想系统的学习JS#xff0c;因为学习成本太大了#xff0c;所以用到什么知识就学习什么知识。此文档就用于记录零散的知识点。主要是还是针对与ES6规范的JS知识点。 以下实验环境都是在windows环…一、前言
在学习vue框架中总是有些知识不是很熟悉又不想系统的学习JS因为学习成本太大了所以用到什么知识就学习什么知识。此文档就用于记录零散的知识点。主要是还是针对与ES6规范的JS知识点。 以下实验环境都是在windows环境下在vue框架中进行实验因为这样比较方便也更方便以后在VUE当中的运用
二、函数
1.回调函数
1.1 概念
如果将 “函数A” 作为参数传递给函数B时我们称函数A为 “回调函数”
1.2 实例
template/templatescript setup
// test1作为参数传递给了函数2那么test1就是一个回调函数
function test1(){console.log(我是一个回调函数)
}function test2(fn){fn()console.log(我是test2函数)
}test2(test1)/script查看控制台发现函数执行成功
2.箭头函数
2.1.没有参数的箭头函数
test () console.log(这是最简单的箭头函数)
test()2.2.单参箭头函数
test x console.log(x x)
test(10)2.3.多参数箭头函数
多参箭头函数参数的小括号就不能省略了
test (x,y) console.log(x x,y y)
test(10,20)2.4.函数体只有一行内容
如果只有一行语句可以同时省略大括号和return。
test () 10 10
console.log(test()2.5.函数体有多行
如果函数体部分有多行就需要使用{}如果有多上的话其实就没必要使用箭头函数了
test () {console.log(1),console.log(2)}
test()2.6.return和{}必须并存
test () {return 10 20}
x test()
console.log(x)
注意在js中会有很多情况会使用匿名的箭头函数作为函数的参数
三、解构-赋值
1.数组解构
正常的一个例子将数组的值分别赋值给多个变量
template/templatescript setup
const arr [ 100, 60, 80 ]const max arr[0]
const avg arr[1]
const min arr[2]console.log(max,avg,min)/script这样赋值在语法上就比较繁琐。 解构赋值的语法如下
template/templatescript setup
const arr [ 100, 60, 80 ]// 对数组进行结构赋值
const [ max,avg,min ] arrconsole.log(max,avg,min)/script2.对象解构
2.1 解构对象
注意点解构时候的变量名必须要和对象之中的key一致。
template/templatescript setup
// 解构之前打印
const obj {name: zhangsan,age: 20}
console.log(obj.name,obj.age)// 解构之后打印
const {name,age } obj
console.log(name,age)/script2.1.1 解构重命变量
有时候解构的时候变量名可能和其它的变量冲突了那么就需要重命名。如下
template/templatescript setup
const name lisi
const age 200const obj {name: zhangsan,age: 20}// 解构之后需要给变量重命名,避免和其它变量冲突
const {name:username,age: userage } obj
console.log(username,userage)/script2.2 解构数组对象
template/templatescript setup
//解构之前打印
const obj [{name: zhangsan,age: 20
}]
console.log(obj[0].name,obj[0].age)//解构之后打印
const [{ name,age}] obj
console.log(name,age)/script2.3 多级对象解构
template/templatescript setup
const obj {name: zhangsan,family: {name: xiaoli,age: 20}
}
console.log(obj.family.name,obj.family.age)// 这里的family是不能省略的,作用是为了指定解构哪个对象
const {name:name1, family: {name,age}} obj
console.log(name1,name,age)/script四、字符串
1.模板字符串
1.1 使用场景
1.拼接字符串和变量 2.在没有它之前要拼接变量比较麻烦
1.2 语法
xxxxx${变量名}xxxxxxx2.模板字符串实例
2.1 常规字符串拼接
template/templatescript setup
let name zhangsan
let age 20console.log(name 今年 age 岁了)/script2.2 模板字符串拼接
template/templatescript setup
let name zhangsan
let age 20console.log(${name}今年${age}岁了)
/script五、模块化
1.分别暴露
1.1 概念和语法
1.分别暴露就是 每个变量和函数都需要使用 export 暴露出去. 2.语法 export 要暴露的内容 3.引入引入的时候需要注意暴漏的变量名是什么引入的时候就写什么不能自定义更改名称
1.2 创建分别暴露模块文件
创建test.js内容如下每个变量和函数都单独使用export进行了暴漏
export const data1 hello
export const data2 worldexport function test(){console.log(这是一个test函数)
}1.3 引入分别暴露模块文件
在app.vue文件中引入模块文件
template/templatescript setup langts
# 引入模块文件中变量
import { data1,data2,test } from ./utils/testconsole.log(data1)
console.log(data2)
test()/script
2.统一暴露
2.1 概念和语法
1.概念: 不需为每个变量都使用单独的export进行暴露使用一个export即可暴露所有内容 2.语法export { 要暴露的内容 }
2.2 创建统一暴露模块文件
创建test.js内容如下所有的内容需要一个export 暴露即可
const data1 hello
const data2 worldfunction test(){console.log(这是一个test函数)
}export {data1,data2,test
}2.3 引入统一暴漏模块文件
引入的时候和分别暴漏没有区别用法完全一致
template
/templatescript setup langtsimport { data1,data2,test } from ./utils/testconsole.log(data1)
console.log(data2)
test()/script
3.默认暴露
3.1 概念和语法
1.默认暴露在一个模块文件中只能有一个默认暴漏 2.语法 export default 要暴漏的内容 3.引入: 引入默认暴漏的时候可以自定义名称而且不用使用{}解构(就是不用分别引入)。
3.1 默认暴露一个内容
function test(){console.log(这是一个test函数)
}export default test3.2 引入模块文件
这里发现没有使用{} 也没有和test的变量名对应而是使用了fn进行接受。结果运行成功
template
divbutton clicksend发送请求/button
/div
/templatescript setup langtsimport fn from ./utils/testfn()/script
3.3 默认暴漏多个内容
const data1 hello
const data2 worldfunction test(){console.log(这是一个test函数)
}export default {data1,data2,test
}3.4 引入模块文件
注意此时当默认暴漏多个内容时引入的时候用法和默认暴多一个内容时是不一样的 暴露一个内容时引入的内容就是暴露的内容可以直接使用 暴露多个内容时: 引入的内容不能直接使用而是按照对象的使用方法进行使用
template
divbutton clicksend发送请求/button
/div
/templatescript setup langts
import test_data from ./utils/testconsole.log(test_data.data1)
console.log(test_data.data2)
test_data.test()/script
以上三种暴露方法根据场景进行使用区分使用。
六、axios
这里后端使用的是json-serverjson-server默认是允许跨域请求的
1.GET请求
1.1 完整版
带请求参数的完整版axios请求.
templatebutton clicksend发送请求/button
/templatescript setup
import axios from axios;function send() {const res axios({method: GET,url: http://192.168.1.10:3000/students/,params: {name: zhangsan}})res.then(response {console.log(-----------)console.log(response.data)},error {console.log(error)})
}/script1.2 简写版
templatebutton clicksend发送请求/button
/templatescript setup
import axios from axios;function send(){axios.get(http://192.168.1.10:3000/students,{params: { name: zhangsan}}).then(response {console.log(response.data)},error {console.log(error)})
}/script两种写法的区别点要注意
1.完整版本中 axios中的参数是一个对象形式的实参 2.简写版本中 axios中的参数不是一个对象而是两个实参
2.POST请求
2.1 完整版
templatebutton clicksend发送请求/button
/templatescript setup
import axios from axios;function send(){const res axios({method: POST,url: http://192.168.1.10:3000/students,data: {id: 4,name: xiaoqiang,age: 26}})res.then(response {console.log(response)},error {console.log(error)})
}/script2.2 简写版
templatebutton clicksend发送请求/button
/templatescript setup
import axios from axios;function send(){axios.post(http://192.168.1.10:3000/students,{ id: 5, name:xiaohu,age:23}). then(response {console.log(response)},error {console.log(error)} )
}/script3.create方法
axios有一个create方法可以构建出具有不同配置的axios实例。这样就可以满足不同的请求。 到这里不直接在APP.vue文件中进行引入axios而是单独创建一个axios的模块文件进行封装。 上边的GET和POST方法只是为了讲解语法所有直接在APP.vue文件中进行请求比较方便。这里使用了create方法就开始涉及到了自定义配置。所以进行了单独的拆分和封装
3.1 创建模块文件
创建src/utils/request.js文件
import axios from axios;# 创建第一个axios的实例
const request axios.create({baseURL: http://192.168.1.10:3000,# 超时时间为8秒timeout: 8000
})# 创建第二个axios的实例
const request1 axios.create({baseURL: http://192.168.1.11:3000,# 超时时间为3秒timeout: 3000
})# 暴露两个axios实例
export { request,request1 }3.2 使用axios实例
在APP.vue中引入axios实例并使用.
templatebutton clicksend发送请求/button
/templatescript setup
import { request } from ./utils/requestfunction send(){request.get(# 这里不用再写完整的目标地址/students,{ params: {age: 23} }).then(response console.log(response.data),error console.log(error))
}/script4.拦截器
4.1.请求拦截器
这里创建了axios的实例 request, 那么就设置request的请求拦截i如果没有设置任何axios的实例就设置axios的拦截器. return config 是必须的是不能省略的
import axios from axios;const request axios.create({baseURL: http://192.168.1.10:3000,timeout: 8000
})# 请求拦截器
request.interceptors.request.use(config {console.log(----------)console.log(config)console.log(----------)return config
})export { request }4.2.响应拦截器
import axios from axios;const request axios.create({baseURL: http://192.168.1.10:3000,timeout: 8000,
})request.interceptors.request.use(config {console.log(----------)console.log(config)console.log(----------)return config})# 响应拦截器,对数据进行解构
request.interceptors.response.use(response {console.log(#######)console.log(response)console.log(#######)return response.data})export { request }这里的两种拦截器只写了语法没有进行特有配置在项目中根据情况进行配置
5.async函数
5.1 普通函数的返回值
function test(){console.log(OK)}console.log(test())结果是undefined
5.2 async加上函数
async函数 加在任意一个函数的前面 1.这个函数也会被标记为异步函数 2.函数的返回值会变成一个promise对象
script setup
async function test(){console.log(OK)}console.log(test())
/script结果是
OK
Promise {fulfilled: undefined}6.await函数
await函数主要有两个功能 1.在异步函数中阻塞 “await语句后边” 的所有的语句等待await的语句执行完成后才会继续执行后续的语句 2.能够直接提取 await后边promise中的返回值可以理解为then函数
6.1 编写python后端
这里没有继续使用json-server要注意 前端要配置跨域或者后端允许跨域请求 main.py内容如下
main.py内容如下
from flask import Flask
import json,timeapp Flask(__name__)app.route(/)
def index():data json.dumps({ name: 张三,age: 1000})time.sleep(5)return dataif __name__ __main__:app.run(host0.0.0.0,debugTrue)6.2 配置前端代理
代理的含义就是 把所有的http请求都转发到 127.0.0.1:5137/api接口上。 那么api接口转发的后端是1.18:5000端口。这样就解决了浏览器同源的策略解决了跨域请求 注意前端的代理模式 适用于开发环境 一旦上生产就需要使用nginx进行转发
编辑vite.config.js
import { defineConfig } from viteexport default defineConfig({# 新增以下内容server: {port: 5137, //vite的默认端口别和后端冲突了proxy: {/api: { //代理的请求target: http://192.168.1.18:5000, //后端的地址changeOrigin: true, //开启跨域访问rewrite: (path) path.replace(/^\/api/,), //重写前缀如果后端本身就有api这个通用前缀那么就不用重写},},}
})6.3 封装axios
编辑 src/utils/request.js. 这里的baseurl就不在后端的地址了而是请求本机的/api接口
import axios from axios;const request axios.create({baseURL: /api,timeout: 8000,
})export { request }6.4 app.vue文件引入并测试
templateh1app.vue/h1button clicksend发送请求/button
/templatescript setup
import { request } from ./utils/requestfunction send(){console.log(before)request.get(/).then(response { console.log(response)})console.log(---------)console.log(after)
}/script这里发现在浏览器点击 “发送请求”没有任何阻塞所有请求全部执行完毕。只是后端的python延时5秒返回数据
6.5 增加await函数
async 可以单独出现但是await必须和async一起出现
templateh1app.vue/h1button clicksend发送请求/button
/templatescript setup
import { request } from ./utils/requestasync function send(){console.log(before)const {data} await request.get(/)console.log(data)console.log(---------)console.log(after)
}/script这时候发现 awaite后边的所有语句全部阻塞阻塞的原因是因为request没有执行完并且加了await函数。 还有一点就是 不用使用then获取值可以直接获取data的值
7.async和await小实例
异步请求数据后然后在模板中显示出来
templateh1app.vue/h1button clicksend发送请求/buttonh1用户名: {{ name }}/h1h1年龄 {{ age }}/h1
/templatescript setup
import {ref} from vue;
import { request } from ./utils/requestconst name ref()
const age ref()async function send(){const {data} await request.get(/)name.value data.nameage.value data.age}/script
文章转载自: http://www.morning.kndst.cn.gov.cn.kndst.cn http://www.morning.ckhpg.cn.gov.cn.ckhpg.cn http://www.morning.gtmdq.cn.gov.cn.gtmdq.cn http://www.morning.jyyw.cn.gov.cn.jyyw.cn http://www.morning.tkhyk.cn.gov.cn.tkhyk.cn http://www.morning.bchfp.cn.gov.cn.bchfp.cn http://www.morning.nqxdg.cn.gov.cn.nqxdg.cn http://www.morning.btlsb.cn.gov.cn.btlsb.cn http://www.morning.tllhz.cn.gov.cn.tllhz.cn http://www.morning.knswz.cn.gov.cn.knswz.cn http://www.morning.tpnch.cn.gov.cn.tpnch.cn http://www.morning.dnbkz.cn.gov.cn.dnbkz.cn http://www.morning.fpzz1.cn.gov.cn.fpzz1.cn http://www.morning.ssjry.cn.gov.cn.ssjry.cn http://www.morning.tbqdm.cn.gov.cn.tbqdm.cn http://www.morning.zrnph.cn.gov.cn.zrnph.cn http://www.morning.qqrlz.cn.gov.cn.qqrlz.cn http://www.morning.fyglg.cn.gov.cn.fyglg.cn http://www.morning.qsy36.cn.gov.cn.qsy36.cn http://www.morning.rbnnq.cn.gov.cn.rbnnq.cn http://www.morning.tqdqc.cn.gov.cn.tqdqc.cn http://www.morning.rwwdp.cn.gov.cn.rwwdp.cn http://www.morning.brkrt.cn.gov.cn.brkrt.cn http://www.morning.chxsn.cn.gov.cn.chxsn.cn http://www.morning.cybch.cn.gov.cn.cybch.cn http://www.morning.mkpqr.cn.gov.cn.mkpqr.cn http://www.morning.bdfph.cn.gov.cn.bdfph.cn http://www.morning.mtrfz.cn.gov.cn.mtrfz.cn http://www.morning.gxtbn.cn.gov.cn.gxtbn.cn http://www.morning.lxmks.cn.gov.cn.lxmks.cn http://www.morning.mqwnp.cn.gov.cn.mqwnp.cn http://www.morning.yhgbd.cn.gov.cn.yhgbd.cn http://www.morning.kflpf.cn.gov.cn.kflpf.cn http://www.morning.jqzns.cn.gov.cn.jqzns.cn http://www.morning.pzlhq.cn.gov.cn.pzlhq.cn http://www.morning.xkppj.cn.gov.cn.xkppj.cn http://www.morning.kkzwn.cn.gov.cn.kkzwn.cn http://www.morning.yrjym.cn.gov.cn.yrjym.cn http://www.morning.gcfrt.cn.gov.cn.gcfrt.cn http://www.morning.rnzgf.cn.gov.cn.rnzgf.cn http://www.morning.txmlg.cn.gov.cn.txmlg.cn http://www.morning.nzms.cn.gov.cn.nzms.cn http://www.morning.tkyry.cn.gov.cn.tkyry.cn http://www.morning.jyfrz.cn.gov.cn.jyfrz.cn http://www.morning.fnpmf.cn.gov.cn.fnpmf.cn http://www.morning.qnksk.cn.gov.cn.qnksk.cn http://www.morning.hqsnt.cn.gov.cn.hqsnt.cn http://www.morning.pzbjy.cn.gov.cn.pzbjy.cn http://www.morning.ktdqu.cn.gov.cn.ktdqu.cn http://www.morning.tnmmp.cn.gov.cn.tnmmp.cn http://www.morning.dhqzc.cn.gov.cn.dhqzc.cn http://www.morning.jyyw.cn.gov.cn.jyyw.cn http://www.morning.mzydm.cn.gov.cn.mzydm.cn http://www.morning.hhpbj.cn.gov.cn.hhpbj.cn http://www.morning.wyrkp.cn.gov.cn.wyrkp.cn http://www.morning.jjwzk.cn.gov.cn.jjwzk.cn http://www.morning.dndk.cn.gov.cn.dndk.cn http://www.morning.zzbwjy.cn.gov.cn.zzbwjy.cn http://www.morning.gqjzp.cn.gov.cn.gqjzp.cn http://www.morning.qnqt.cn.gov.cn.qnqt.cn http://www.morning.hqbnx.cn.gov.cn.hqbnx.cn http://www.morning.hkcjx.cn.gov.cn.hkcjx.cn http://www.morning.sqgsx.cn.gov.cn.sqgsx.cn http://www.morning.yfnjk.cn.gov.cn.yfnjk.cn http://www.morning.hqrr.cn.gov.cn.hqrr.cn http://www.morning.kaoshou.net.gov.cn.kaoshou.net http://www.morning.banzou2034.cn.gov.cn.banzou2034.cn http://www.morning.jntcr.cn.gov.cn.jntcr.cn http://www.morning.pnbls.cn.gov.cn.pnbls.cn http://www.morning.nhdw.cn.gov.cn.nhdw.cn http://www.morning.dyfmh.cn.gov.cn.dyfmh.cn http://www.morning.bojkosvit.com.gov.cn.bojkosvit.com http://www.morning.dnpft.cn.gov.cn.dnpft.cn http://www.morning.jwcmq.cn.gov.cn.jwcmq.cn http://www.morning.xbmwm.cn.gov.cn.xbmwm.cn http://www.morning.rxzcl.cn.gov.cn.rxzcl.cn http://www.morning.zhnyj.cn.gov.cn.zhnyj.cn http://www.morning.nkqnn.cn.gov.cn.nkqnn.cn http://www.morning.sskhm.cn.gov.cn.sskhm.cn http://www.morning.wqmyh.cn.gov.cn.wqmyh.cn