文章目录
promise
promise是一个异步解决方案,主要是为了解决回调地狱,回调地狱就是回调函数层层嵌套
传统的异步代码的可读性很差,所以,使用promise可以提高可读性
promise中有三个状态
- padding等待
- resolve 成功
- reject 失败
promise中方法
- then
- catch
语法
new Promise((resolve,reject)=>{
异步操作
resolve(ok成功的信息)
reject(err失败的信息)
})
promise案例
promise处理ajax
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="node_modules/jquery/dist/jquery.min.js"></script>
</head>
<body>
<script>
function linkapi(url, method) {
return new Promise((resolve, reject) => {
$.ajax({
url,
type: method,
dataType: "json",
success(ok) {
resolve(ok)
},
error(err) {
reject(err)
}
})
})
}
linkapi("http://api.artgoer.cn:8084/artgoer/api/v1/user/324380/v3/topic/topicHomeByLabel?pageIndex=1&token=b544cd63-6d42-46fe-a96c-3cf96bae3113&topicId=62187", "get").then((ok) => {
console.log(ok)
}).catch((err) => {
console.log(err)
})
</script>
</body>
</html>
交互基本概念,数据请求
前端和后端的概念
任何一个应用程序都有前端和后端
前端:客户端,就是浏览器(pc端 手机端)
后端:服务器(性能很好的电脑)是提供计算服务的设备。
服务器的构成包括处理器、硬盘、内存、系统总线等,和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。
交互的应用场景(什么时候用到前后端交互)
- 从后端获取一些数据,将其进行展示或计算
- 将用户在页面中提交的数据发送给后端
Vue.js 交互
vue请求数据有Vue-resource、Axios、fetch三种方式。Vue-resource是Vue官方提供的插件,axios是第三方插件,fetch es6原生
Vue.js resource(官方提供的)交互 2.0停止更新了
Vue自身不带处理HTTP请求 如果想使用HTTP请求必须要引入 vue-resource.js 库它可以通过XMLHttpRequest发起请求并处理响应。也就是说,$.ajax能做的事情,vue-resource插件一样也能做到,而且vue-resource的API更为简洁。
Vue.js 交互借助于 $http 完成
下载:npm install --save vue-resource
Axios的使用
Axios是第三方插件,不仅能在Vue里使用,还能再其他第三方库中使用例如react
下载:npm install --save axios
Axios–get交互
get类型
语法:
axios.get('/路径?k=v&k=v}
.then((ok)=>{})
.catch((err)=>{})
Axios–post交互
post类型
语法:
axios.post('/user', {k:v,k:v })
.then(function (ok) { })
.catch(function (error) { });
实例化对象:
let param = new URLSearchParams();
添加发送数据参数
param.append(“key”, “value”);
Axios–综合交互
axios(utl:‘请求地址’,method:‘请求方式’,data/params:{k:v}).then((ok)=>{})
使用get发送数据的时候 使用params:{key:val}发送数据
使用post发送数据需要使用 var param=new URLSearchParams();修改传参方法
使用param.append(“uname”,“xixi”)添加数据并且使用data发送数据
promise封装的axios 案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="node_modules/axios/dist/axios.min.js"></script>
</head>
<body>
<script>
function linkapi(url,method){
return new Promise((resolve,reject)=>{
axios({
url,
method
}).then((ok)=>{
resolve(ok)
}).catch((err)=>{
reject(err)
})
})
}
linkapi("http://api.artgoer.cn:8084/artgoer/api/v1/user/324380/v3/topic/topicHomeByLabel?pageIndex=1&token=b544cd63-6d42-46fe-a96c-3cf96bae3113&topicId=62187","get").then((ok)=>{
console.log(ok)
}).catch((err)=>{
})
</script>
</body>
</html>
promise封装的axios请求数据案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="node_modules/vue/dist/vue.min.js"></script>
<script src="node_modules/axios/dist/axios.min.js"></script>
</head>
<body>
<div id="demodiv">
<button @click="fun()">点我请求</button>
<img src="1.gif" v-if="bool">
<ul>
<li v-for="(v,i) in arr">
{{v.commentTxt}}---{{v.createAt|xiaoming}}
</li>
</ul>
</div>
<script>
Vue.filter("xiaoming",(val)=>{
return val.substr(0,11)
})
new Vue({
el:"#demodiv",
data:{
bool:false,
arr:[]
},
methods:{
//axios请求放在方法
api(url,method){
return new Promise((resolve,reject)=>{
axios({
url,
method
}).then((ok)=>{
resolve(ok)
}).catch((err)=>{
reject(err)
})
})
},
fun(){
this.bool=!this.bool
this.api("http://api.artgoer.cn:8084/artgoer/api/v1/user/324380/v3/topic/topicHomeByLabel?pageIndex=1&token=b544cd63-6d42-46fe-a96c-3cf96bae3113&topicId=62187","get").then((ok)=>{
console.log(ok.data.data.commentList)
this.arr=ok.data.data.commentList
this.bool=!this.bool
}).catch((err)=>{
console.log(err)
})
}
},
computed:{
},
watch:{
}
})
</script>
</body>
</html>
过滤器
格式化展示数据-----把展示的语句快速的梳理成我们想要的内容时,就用过滤器
过滤器作用
在不改变数据的情况下,输出前端需要的格式数据
vue2x的时候,vue取消了内置的过滤器,如果想使用过滤器,那么就必须自定义过滤器
2.0中已经废弃了内置过滤器,需要我们自定义过滤器来使用filter
全局过滤器的定义方法
位置:创建实例之前
Vue.filter(‘sum过滤器的名字随便写’, function(va过滤的数据会自动传入l){
return val + 4;
});
案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="node_modules/vue/dist/vue.min.js"></script>
<script src="node_modules/axios/dist/axios.min.js"></script>
</head>
<body>
<!-- 全局过滤器
写在实例之前
Vue.filter("过滤器的名字随便写的",(你要过滤的数据会自动传入)=>{
return 逻辑
})
-->
<div id="demodiv">
aaaaaaaaa
<h1>{{text|xiaoming}}</h1>
</div>
<div id="demodivb">
bbbbbbbbbbb
{{text|xiaoming}}
<h1>{{num|xiaohong}}</h1>
</div>
<script>
Vue.filter("xiaoming",(val)=>{
return "《《"+val+"》》"
})
Vue.filter("xiaohong",(val)=>{
return "¥"+val
})
new Vue({
el:"#demodiv",
data:{
text:"demodiv"
}
})
new Vue({
el:"#demodivb",
data:{
text:"demodivb",
num:19.9
}
})
</script>
</body>
</html>
Vue.js 局部过滤器
只能在当前vue注册内容中使用
在vue实例中与el属性data属性同级定义
filters:{
过滤器名字:function(val){
return 输出内容
}
}
过滤器的调用方法
{{ msg | sum }}
注意事项
定义全局过滤器,必须放在Vue实例化前面
在没有冲突的前提下,过滤器可以串联