当前位置: 首页 > article >正文

Axios交互

一、什么是交互?

交互就是交流互动
根据人的输入,让程序或应用去根据输入选择执行流程,提供给我们需要的信息
1. 前端与后端

任何一个应用程序都有前端和后端
  • 前端:客户端,就是浏览器
  1. 控制页面的样式
  2.  数据的展示
  3. 接收用户输入,与用户交互
  • 后端:服务器
  1. 执行业务处理
  2. 操作数据库,返回给我们需要的数据
2. 前后端交互原理

1. 前台接收用户的信息,发送到后台
2. 后台获得信息后进行数据处理,到数据库取一些数据
3. 后台拿到数据库数据返回给前台页面进行显示

 

 . 什么是 axios

axios 是一个基于Promise 用于浏览器和 nodejs HTTP 客户端

1.作用

  • 从浏览器中创建 XMLHttpRequests
  • node.js 创建 http 请求
  • 支持 Promise API
  • 拦截请求和响应
2.相关网址
  • 官方地址:https://github.com/axios/axios
  • 中文地址:http://www.axios-js.com/
  • 中文文档:https://www.kancloud.cn/yunye/axios/234845

. axios安装使用

使用 npm

$ npm install axios
使用 cdn
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
1.发送 get 请求
<body>
    <div id="app">
        <h1>{{msg}}</h1>
        <h1>{{name}}</h1>
        <button @click="get()">GET</button>
    </div>
<script src="js/vue.js"></script>
<script src="js/axios.min.js"></script>
<script>
    var app = new Vue({
        el : '#app',
        data : {
            msg : 'Hello',
            name : 'none'
        },
        methods : {
            get : function(){
                axios.get('./a.txt', {
                    params : {
                        id : 1000
                    },
                    headers : {
                    token : 'HHHHHHHHHHHHHHH'
                    }
                }).then(res => {
                    this.msg = res.data;
                    this.name = res.data.name;
                }).catch(err =>{
                this.msg = err;
                });
            }
        }
    })
</script>
</body>
a.txt
{
"name":"Tom",
"age":13
}
2.发送 post 请求
<!DOCTYPE html>
<html lang="en">


<head>
    <meta charset="UTF-8">
    <title>post方法</title>
    <script type="text/javascript" src="vue.js"></script>
    <script type="text/javascript" src="axios.min.js"></script>
</head>
<body>
    <div id="app">
        <p>{{ msg }}</p>
        <button @click="post"> post方法 </button>
    </div>
</body>
</html>
<script type="text/javascript">
    var vm = new Vue({
        el: '#app',
            data: {
                msg: "hello",
                postUrl: "http://route.showapi.com/90-87?
                showapi_appid=45300&showapi_sign=c28de9d6f79e44369a9abcd40fa3e277",
            },
            methods: {
                post() {
                    axios.post(this.postUrl, {
                        userId: "01",
                        userName: "MT"
                    }, {
                        headers: {
                            'Content-Type': 'application/x-www-form-urlencoded'
                        }
                    }).then( //仍然支持promise语法
                        res => {
                            // 这里我们把返回值赋值给msg显示到页面
                            this.msg = res.data;
                        }).catch(err => {
                            // 没有成功获得数据的时候,把错误打印出来
                            console.log(err)
                          })
                }
            }
        });
</script>
注意:在不同服务器下的项目需要解决跨域问题, java 中可在方法或类中添加 @CrossOrigin 注解 , 当然也有其他方法,模板都一样上网搜粘一粘

. Vue.js 实例的生命周期

1. 什么是实例的生命周期?
生命周期: 是指实例对象从构造函数开始执行(被创建)到被 GC Garbage Collection :垃圾回收)
回收销毁的整个存在的时期
2. 什么是生命周期钩子?
在生命周期中被自动调用的函数 叫做生命周期函数,也被形象的称为 钩子函数
在对象从创建到被回收的整个过程中会在不同的时期有不同的钩子函数,我们可以利用不同时期的钩子
函数去完成不同的操作。
3.常用钩子函数

 

 4.生命周期示例
<body>
    <div id='app'>
        <h1>{{message}}</h1>
        <input type="text" v-model="message" />
    </div>
<script src="js/axios.min.js"></script>
<script src="js/vue.js"></script>
<script>
    var app = new Vue({
        el: '#app',
        data: {
            message: 'Hello'
        },
        // 生命周期的写法需要注意,适合data在一个级别的
        beforeCreate: function () {
            console.group('------beforeCreate创建前状态------');
            console.log("el: " + this.$el); //undefined
            console.log("data: " + this.$data); //undefined
            console.log("message: " + this.message) //undefined
            // 在这个时期 ,说明 el 和 data 并未初始化
            // 这个时候做的操作,例如:加一些loading事件
        },
        created: function () {
            console.group('------created创建完毕状态------');
            console.log("el: " + this.$el); //undefined
            console.log("data: " + this.$data); //已被初始化
            console.log("message: " + this.message); //Vue的生命周期,说明已被初始化
            // 这个时期,data 数据已经初始化,但是 el没有
            // 这个时候可以做的操作例如:结束loading事件,还做一些初始化,实现函数自执行等
        },
        beforeMount: function () {
            console.group('------beforeMount挂载前状态------');
            console.log("el: " + (this.$el)); //已被初始化
            console.log(this.$el);
            console.log("data: " + this.$data); //已被初始化
            console.log("message: " + this.message); //已被初始化
            // 到这个时期,data 和 el 都已经 初始化
        },
        mounted: function () {
            console.group('------mounted 挂载后状态------');
            console.log("el: " + this.$el); //已被初始化
            console.log(this.$el);
            console.log("data: " + this.$data); //已被初始化
            console.log("message: " + this.message); //已被初始化
            // 完成挂载,这个生命周期用的是比较多的
            // 最常见的就是:1、发起后端请求,拿回数据 2、接收页面之间的传递的参数 3、子组件向父组件传递参数
         },
         beforeUpdate: function () {
            console.group('------beforeUpdate 更新前状态------');
            console.log("el: " + this.$el);
            console.log(this.$el);
            console.log("data : " + this.$data);
            console.log("message: " + this.message);
        },
        updated: function () {
            console.group('------updated 更新后状态------');
            console.log("el: " + this.$el);
            console.log(this.$el);
            console.log("data: " + this.$data);
            console.log("message: " + this.message);
            // 当vue发现data中的数据发生了改变,会触发对应组件的重新渲染,先后调用
            beforeUpdate和updated钩子函数。我们在console中输入 vm.message = '触发组件更新'
            // 这里就比较好理解了:当希望更新组件前做一些操作的时候,我们就可以调用
            beforeUpdate钩子函数,同理使用 updated 钩子函数
        },
        beforeDestroy: function () {
            console.group('------beforeDestroy 销毁前状态------');
            console.log("el: " + this.$el);
            console.log(this.$el);
            console.log("data: " + this.$data);
            console.log("message: " + this.message);
            // beforeDestroy钩子函数在实例销毁之前调用。在这一步,实例仍然完全可用。
        },
        destroyed: function () {
            console.group('------destroyed 销毁后状态------');
            console.log("el: " + this.$el);
            console.log(this.$el);
            console.log("data: " + this.$data);
            console.log("message: " + this.message);
            //destroyed钩子函数在Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。
        }
    });
</script>
</body>

. axios 中使用拦截器

1. 什么是全局拦截器
全局拦截器: 可在发送请求或响应请求被 then catch 处理前拦截它们
1. 发送请求之前拦截,可以对请求数据进行处理,比如给每一个请求都添加上 token 或者给请求统一
添加一些内容
2. 在响应请求之后拦截,我们可以对返回的数据进行二次的加工
 2. 发送前与响应后拦截示例
<body>
    <div id='app'>
        <h1>{{msg}}</h1>
        <button @click="post()">Post</button>
    </div>
<script src="js/axios.min.js"></script>
<script src="js/vue.js"></script>
<script>
    var app = new Vue({
        el : '#app',
        data : {
            msg : "Hello"
        },
        mounted : function(){
        // 在数据挂载时设置拦截器
        axios.interceptors.request.use(function(config){
            console.log("发送前...")
            return config;
        }, function(err){
            console.log(err);
            return Promise.reject(err);
        });
        axios.interceptors.response.use(function(config){
            console.log("响应后...")
            return config;
        }, function(err){
            console.log(err);
            return Promise.reject(err);
        });
    },
    methods : {
        post(){
            axios.post("http://route.showapi.com/90-87?
            showapi_appid=45300",{
                id : 1001
            },{
            headers : {
                'Content-Type' : 'application/x-www-form-urlencoded'
            }
        }).then(res => {
            this.msg = res.data;
        }).catch(err => {
            console.log(err);
        });
    }
}
})
</script>
</body>

六、Vue.js 过滤器

1. 什么是过滤器?
Vue.js 支持在 {{}} 插值的尾部添加一个管道符 | 对数据进行过滤,经常用于格式化文本,比如字母 的大写、货币的千位使用逗号分隔等
过滤器的本质: 就是一个有返回值的方法
2. 过滤器的定义方法

  • 过滤的规则是自定义的,通过给Vue示例添加选项filters来设置
  • 过滤器是 JavaScript 函数,因此可以接收参数

                {{ message | filterA('arg1', arg2) }}

  • 过滤器可以串联
  1. {{msg | filterA | filterB}}
  2.  filterA 被定义为接收单个参数的过滤器函数,表达式 message 的值将作为参数传入到函数中。然后继续调用同样被定义为接收单个参数的过滤器函数 filterB,将 filterA 的结果传递到filterB 中。
<body>
    <div id="app">
        <h1>{{bonus}}</h1>
        <h1>{{bonus | discount(8) | myCurrency('$')}}</h1>
    </div>
<script src="js/vue.js"></script>
<script src="js/axios.min.js"></script>
<script>
    var app = new Vue({
        el : '#app',
        data : {
            bonus : 9999999
        },
        filters : {
            myCurrency : function(res, fmt){
                console.log("fmt=="+fmt);//$
                console.log("res=="+res);//7999999.2
                return fmt + res;
            },
            discount : function(res, dis){
                console.log("res=="+res); //9999999
                console.log("dis=="+dis); //8
                return res * dis / 10;
            }
        }
    });
</script>
</body>


http://www.kler.cn/a/401534.html

相关文章:

  • 深度学习的实践层面
  • TON商城与Telegram App:生态融合与去中心化未来的精彩碰撞
  • 3D Streaming 在线互动展示系统:NVIDIA RTX 4090 加速实时渲染行业数字化转型
  • Figma中文网:UI设计师的新资源宝库
  • 第十六届蓝桥杯模拟赛(第一期)-c++/c
  • webSocket的使用文档
  • 疫情下的图书馆管理系统开发:Spring Boot
  • MATLAB调用Python自定义函数,极度方便好用
  • Bokeh实现大规模数据可视化的最佳实践
  • 单片机的基本组成与工作原理
  • Python自学之Colormaps指南
  • Spring学习笔记_41——@RequestBody
  • UniApp的Vue3版本中H5配置代理的最佳方法
  • 网络协议之FTP
  • Kafka进阶_1.生产消息
  • 从0开始学习Linux教程目录
  • Linux系统性能调优技巧与实践案例
  • Qt的一个基本用户登录界面编写|| 从0搭建QT的信号与槽的应用案例 ||Qt样式表的应用
  • 小车综合玩法--5.画地为牢
  • 机器学习笔记 // 探索整体的预测
  • Spark使用过程中的 15 个常见问题、详细解决方案
  • 15分钟学 Go 第 58 天 :复习与总结
  • 解决 VMware 嵌套虚拟化提示 关闭“侧通道缓解“
  • 人工智能时代,如何建设一个大模型呼叫中心?
  • [论文阅读] 异常检测 Deep Learning for Anomaly Detection: A Review (四)三种分类方法对比
  • 力扣 LeetCode 102. 二叉树的层序遍历(Day6:二叉树)