vue-promise-交互-过滤器

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实例化前面
在没有冲突的前提下,过滤器可以串联

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值