Promise异步请求解决
异步编程解决方案
用resolve和reject两个参数处理成功和失败两种情况,并通过p.then获取处理结果;
var p=new Promise(funtion(reslive,reject){
//要加以判断
//成功函数调用 reslive()
//失败函数调用 reject()
})
p.then(funtion(res){
//正确结果
},funtion(err){
//错误结果
})
2.发送多次ajax请求
函数(请求)
.then(funtion(res){
return 函数(‘请求’)
}).then(funtion(res){
得到数据,
})
实例方法:
1.then( funtion(){},funtion(){}):获取正确和错误的
2.catch(funtion(){}):获取错误的:
3.finally( funtion(){}):不管失败还是成功都会执行;
对象方法:
1.Promise.all( ):多次触发多个异步,得到所有结果;
Promise.all(实例1,实例2,实例3).then(funtion(result){
//三个全部打印
conslie.log(result)
})
2.Promise.race( ):多次触发得到一次成功的结果
Promise.race(实例1,实例2,实例3).then(funtion(result){
//哪个执行得快打印哪个;
conslie.log(result)
})
fetch请求用法
fetch('请求路径').then(data=>{
return data.text();
}).then(res=>{
console.log(res)
})
method:‘get’/‘post’/‘put’/‘delete’;
body:'请求参数’;
headers:{请求头};
1.get请求:
1.fetch('/abc?id=3'.then(data=>{
return data.text();
}).then(ret=>{
conslole.log(ret)
}));
2.fetch('/abc/123',{
method:'get'
}).then(data=>{
return data.text();
}).then(res=>{
console.log(res)
})
2.delete请求
fetch('/abc/123',{
method:'get'
}).then(data=>{
return data.text();
}).then(res=>{
console.log(res)
})
3.post请求
1.fetch('路径',{
method:‘post',
body:'uname=lisi&age=21',
headers:{
'Content-Tepy':'application/x-www-form-urlencoded',
}
}).then(data=>{
return data.text()
}).then(ret=>{
console.log(ret)
})
2.fetch('路径',{
method:‘post',
body:JSON.stringify({
name:'ahha',
age:20
})
headers:{
'Content-Tepy':'application/json',
}
}).then(data=>{
return data.text()
}).then(ret=>{
console.log(ret)
})
4.push
fetch('路径',{
method:‘push',
body:JSON.stringify({
name:'ahha',
age:20
})
headers:{
'Content-Tepy':'application/json',
}
}).then(data=>{
return data.text()
}).then(ret=>{
console.log(ret)
})
axios请求用法
axios.get('路径').then(ret=>{
console.log(ret.data)
})
1.get请求
axios.get(url,{
param:{
id:3
}
}).then(res=>{
console.log(res.data)
})
三种方式
2.delete
3.post
全局配置
1.axios.defalts.timeout=300 // 超时时间
2.axios.default.baseURL=‘默认地址’
3.axios.defatult.headers['mytokan;]=‘1qqsqewe’ //设置请求头
拦截器
1,请求拦截器:
axios.interceptors.request.use(funtion(config){
return config;
},funtion(err){
//处理错误信息
})
2.响应拦截器
axios.interceptors.response.use(funtion(res){
//进行对数据进行处理
return res;
},function(err){
//处理响应的错误信息
})
async/await 的基本用法
async function queryData(id) {
const ret = await axios.get('/data');
return ret;
}
queryData.then(ret=>{
console.log(ret)
})
多个·异步请求
async function queryData(id) {
const info = await axios.get('/async1');
const ret = await axios.get(‘async2?info=‘+info.data);
return ret;
}
queryData.then(ret=>{
console.log(ret)
})
错误的返回
路由
1.路由的概念
(1)后端路由:
UR请求地址与服务器资源之间的对应关系;
根据不同用户url,返回不同的内容;
(2)前端路由:
用户事件与事件处理函数之间对应关系;
根据不同的用户事件,返回不同的内容;
2.路由的使用
(1)导入文件 Vue-router.js;
(2)创建路由实例;
router=new VueRouter({
rotes:[
{path:'路径',component:组件名},
{path:'路径',component:组件名}
]
})
(3)创建组件:
var 组件名={
template:`<h1>组件模板</h1>`
}
(4)使用占位符
<router-view></router-view>
(5)在vm里面挂载router
const vm = new Vue({
el: '#app',
router
})
(6)如果想点击跳转
<router-link to="路径"></router-link>
路由嵌套
例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
<script src="./lib/vue_2.5.22.js"></script>
<script src="./lib/vue-router_3.0.2.js"></script>
</head>
<body>
<div id="app">
<router-link to="/user">User</router-link>
<router-link to="/register">Register</router-link>
<router-view></router-view>
</div>
<script>
const User = {
template: '<h1>User 组件</h1>'
}
const Register = {
template: `<div>
<h1>Register 组件</h1>
</br>
<router-link to="/register/teb1">tep1</router-link>
<router-link to="/register/teb2">tep2</router-link>
<router-view></router-view></div>`
}
const Teb1 = {
template: '<h3>teb1 组件</h3>'
}
const Teb2 = {
template: '<h3>teb2 组件</h3>'
}
const router = new VueRouter({
routes: [
// { path: '/', redirect: '/user' },
{ path: '/user', component: User },
{
path: '/register', component: Register, children: [
{ path: '/register/teb1', component: Teb1 },
{ path: '/register/teb2', component: Teb2 }
]
}
]
})
const vm = new Vue({
el: '#app',
data: {},
router
})
</script>
</body>
</html>
路由重定向
概念:简单来说就是一打开的默认展示页面;
{path:'/',redirect:'/user'}//就是打开时,将打开/路径的跳转到'/user'路径下的;
使用场景:
var router=new VueRouter({
routes:[
{path:'默认路径',redirct:'跳转路径'}
]
})
动态路由参数匹配
1.$route.params.id获取
var router=new VueRouter({
routes:[
{path:'默认路径/:id',component:组件名}
]
})
const 组件名={
template:`<div>{{$route.params.id}}</div>`
}
2.props:true;props:[‘id’]
var router=new VueRouter({
routes:[
{path:'默认路径/:id',component:组件名,props:true}
]
})
const 组件名={
props:['id']
template:`<div>{{id}}</div>`
}
3.以对象形式传参,但是不能获取id
var router=new VueRouter({ routes:[ {path:'默认路径/:id',component:组件名,props:{name:'cui',age:'21'}} ]})
const 组件名={
props:['name','age']
template:`<div>{{name}}{{age}}</div>`
}
4.通过函数形式传参:解决可以接收id的
var router=new VueRouter({ routes:[ {path:'默认路径/:id',component:组件名,props:route=>({name:'cui',age:'21'})} ]})
const 组件名={
props:['id',name','age']
template:`<div>{{id}}{{name}}{{age}}</div>`
}
命名路由
var router=new VueRouter({
routes:[
{
path:'默认路径/:id',
name:'名字',
component:组件名,
props:{name:'cui',age:'21'}}
]})