Vue中axios的使用教程的代码实例

准备:要先导入axios.js跟vue.js的包

1_axios基本语法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input type="button" value="axios请求" onclick="test()"/>

    <!-- 1、引入axios库文件 -->
    <script src="lib/axios.min.js"></script>
    <script>
        function test(){
            // 2 设置axios基本参数
            var result = axios({
                // 设置请求模式(GET/POST)
                method:'GET',
                // 设置 url 请求地址
                url:'http://150.158.15.81:8080/search'
            })

            // 3 设置回调函数 
            // data网络服务器请求响应返回的内容 axios 包装6个模块
            // config   配置
            // data     数据(我们所需要真实的数据)
            // headers  请求头
            // request  请求
            // status   状态编码
            // statusText  状态描述
            result.then(function(data){
                console.log(data.data)
            })
        }
    </script>

</body>
</html>

2_axios参数传递

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input type="button" value="axios测试" onclick="test()"/>
    <script src="lib/axios.min.js"></script>
    <script>
        function test(){
            axios({
                method:'POST',
                url:'http://150.158.15.81:8080/search',
                // get请求
                // params:{ key:'周杰伦',pn:1 },

                // post请求
                data:{ key:'周杰伦',pn:1 }
            }).then(function(data){
                console.log(data);
            })
        }
    </script>
</body>
</html>

3_使用async和await调用axios

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input type="button" value="axios测试" onclick="test()"/>
    <script src="lib/axios.min.js"></script>
    <script>
        // 如果网络请求返回的是Promise示例,那么可以使用await语法修饰 
        // 如果某个函数被await语法修饰那么此方法必须是 async 方法
        async function test(){
            var result = await axios({
                method:'get',
                url:'http://150.158.15.81:8080/search'
            })
            console.log(result);
        }
    </script>
</body>
</html>

4_解构赋值

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input type="button" value="axios测试" onclick="test()"/>
    <script src="lib/axios.min.js"></script>
    <script>
        // 如果网络请求返回的是Promise示例,那么可以使用await语法修饰 
        // 如果某个函数被await语法修饰那么此方法必须是 async 方法
        async function test(){
            // {data} 使用解构赋值直接获取json格式数据中指定属性名称的数据
            // {data:res} 为解构赋值中属性data取别名叫res
            var {data:res} = await axios({
                method:'get',
                url:'http://150.158.15.81:8080/search'
            })
            console.log(res.data);
        }


        // jquery  $.ajax()  $.get()      $.post{}
        // axios   axios()   axios.get()  axios.post()
    </script>
</body>
</html>

5_axios中的get和post函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input type="button" value="GET请求" onclick="test1()"/>
    <input type="button" value="POST请求" onclick="test2()"/>

    <input type="text" id="key"/>
    <input type="button" value="GET请求URL拼接传参" onclick="test3()"/>

    <!-- 1、引入axios库文件 -->
    <script src="lib/axios.min.js"></script>
    <script>
        function test1(){
            // axios.get 方式请求
            // 注释事项: get方式传递参数必须表名params属性
            axios.get('http://150.158.15.81:8080/search',{
                params:{
                    key:'周杰伦',
                    pn:1
                }
            }).then(function(data){
                console.log(data)
            })
        }

        async function test2(){
            // axios.post 方式请求
            var {data:res} = await axios.post('http://150.158.15.81:8080/search',{ key:'陈奕迅',pn:1})
            console.log(res.data);
        }

        function test3(){
            //根据标签id获取文本框的value值
            var key = document.getElementById("key").value;
            // axios.get 方式请求
            axios.get('http://150.158.15.81:8080/search?key='+key+'&pn=1').then(function(data){
                console.log(data)
            })
        }

    </script>

</body>
</html>

6_vue过滤器基本语法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <!-- vue过滤器 | 管道符 format 只是一个函数名称  -->
        <h1>{{ username | format }}</h1>
    </div>
    <script src="lib/vue.min.js"></script>
    <script>
        var vm = new Vue({
            el:'#app',
            data:{
                username:'admIN'
            },
            // vue的过滤器 必须要写入filters节点之下
            filters: {
                // 过滤器本质上就是一个带有返回值的函数
                // val 参数表示需要文本格式化的内容
                format(val){
                    //return val.toUpperCase();
                    return val.substr(0,1).toUpperCase()+val.substr(1).toLowerCase();
                }
            }
        })
    </script>
</body>
</html>

7_vue全局过滤器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <!-- vue过滤器 | 管道符 format 只是一个函数名称  -->
        <h1>{{ phone | numFormat }}</h1>
    </div>
    <div id="app2">
        <!-- vue过滤器 | 管道符 format 只是一个函数名称  -->
        <h1>{{ tel | numFormat }}</h1>
    </div>
    <script src="lib/vue.min.js"></script>
    <script>
        // 私有的过滤器只能适用于指定某一个el区域 ,全局过滤器可以适用所有定义el区域
        // 定义全局过滤器  Vue.filter(参数一,参数二)
        // 参数一 过滤器名称(函数名称)
        // 参数二 过滤器具体实现(方法实现/格式化要渲染文本)
        Vue.filter("numFormat",function(val){
            return val.substr(0,3)+"****"+val.substr(7);
        })

        var vm = new Vue({
            el:'#app',
            data:{
                phone:'13574838886'
            },
            // 如果私有和全局同时存在 私有的优先级高于全局过滤器
            filters: {
                numFormat(val){
                    return 'aaa';
                }
            }
        })
        var vm2 = new Vue({
            el:'#app2',
            data:{
                tel:'13555555555'
            }
        })
    </script>
</body>
</html>

8_使用vue过滤器实现日期格式化

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- div标签用于视图渲染,为渲染视图设置id属性 -->
    <div id="app">
        <h1>用户管理模块</h1>
        <input type="text" v-model="newuser" placeholder="在此输入用户名"/>
        <input type="button" value="新增" @click="add"/>
        <table border="1" width="60%">
            <tr>
                <th>编号</th>
                <th>用户名</th>
                <th>状态</th>
                <th>创建时间</th>
                <th>操作</th>
            </tr>
            <tr align="center" v-for="item in list" :key="item.id">
                <td>{{item.id}}</td>
                <td>{{item.user}}</td>
                <td>
                    <input type="checkbox" v-model="item.type" :id="'cb'+item.id"/>
                    <label :for="'cb'+item.id" v-if="item.type">启用</label>
                    <label :for="'cb'+item.id" v-else>禁用</label>
                </td>
                <td>{{item.time | dateFormat}}</td>
                <td>
                    <a href="http://www.baidu.com" @click.prevent="deleteById(item.id)">删除</a>
                </td>
            </tr>
        </table>
    </div>
    <!-- 引入vue核心框架 -->
    <script src="lib/vue.min.js"></script>
    <script src="lib/daijs.min.js"></script>
    <script>

        // 全局日期格式化过滤器
        Vue.filter("dateFormat",function(val){
            return dayjs(val).format('YYYY-MM-DD HH:mm:ss');
        })

        // 实例化ViewModel VUE对象
        var vm = new Vue({
            // el 固定写法,表示你动态渲染得网页元素,网页渲染在指定的模块中
            el:'#app',
            // data 数据模型 以键值对形式存储数据
            data:{
                //双向绑定新增用户
                newuser:'',
                // 自增ID
                num:4,
                //数据集合
                list:[ 
                    {id:1,user:'zhangsan',type:true,time:new Date()},
                    {id:2,user:'lisi',type:false,time:new Date()},
                    {id:3,user:'wangwu',type:true,time:new Date()}
                ]
            },
            methods: {
                //根据id删除数据方法
                deleteById(id){
                    //循环遍历数组
                    for(var i=0;i<this.list.length;i++){
                        if(id==this.list[i].id){
                            //删除索引
                            this.list.splice(i,1);
                            break;
                        }
                    }
                },
                add(){
                    //判断用户不能为null
                    if(this.newuser==''){
                        alert("用户名不能为空");
                        return;
                    }
                    //创建新用户对象
                    var obj = {
                        id:this.num,
                        user:this.newuser,
                        type:true,
                        time:new Date()
                    }
                    //添加数组
                    this.list.push(obj);
                    //id自动增长
                    this.num++;
                    //重置文本框
                    this.newuser='';
                }
            }
        })
    </script>
</body>
</html>

9_多过滤器链

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <h1>{{str | filterA | filterB | filterC}}</h1>
    </div>
    <script src="lib/vue.min.js"></script>
    <script>
        var vm = new Vue({
            el:'#app',
            data:{
                str:'hello world!'
            },
            filters: {
                filterA(val){
                    return val.substr(1)
                },
                filterB(val){
                    return val.substr(1)
                },
                filterC(val){
                    return val.substr(1)
                }   
            }
        })
    </script>
</body>
</html>

10_过滤器参数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <h1>{{str | filterA(3, 4)}}</h1>
    </div>
    <script src="lib/vue.min.js"></script>
    <script>
        Vue.filter("filterA",function(val,index,length){
            return val.substr(index,length);
        })
        var vm = new Vue({
            el:'#app',
            data:{
                str:'hello world!'
            }
        })
    </script>
</body>
</html>

11_watch侦听器基本语法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <input type="text" v-model="username"/>
    </div>
    <script src="lib/vue.min.js"></script>
    <script>
        var vm = new Vue({
            el:'#app',
            data:{
                username:''
            },
            // VUE侦听器必须写在watch节点下
            // VUE侦听器本质上就是一个带有参数的函数
            
            watch: {
                // newVal,oldVal 两个参数是可选的,按照顺序第一个参数时新值
                // newVal 修改之后的值
                // oldVal 修改之前的值
                username(newVal,oldVal){
                    console.log(newVal,oldVal);
                }
            }

        })
    </script>
</body>
</html>

12_使用侦听器实现用户验证

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <input type="text" v-model="username"/>
    </div>
    <script src="lib/vue.min.js"></script>
    <script src="lib/axios.min.js"></script>
    <script>
        var vm = new Vue({
            el:'#app',
            data:{
                username:''
            },
            watch: {
                async username(newVal){
                    var result = await axios.get('http://127.0.0.1:8080/check?username='+this.username)
                    console.log(result.data)
                }
            }
        })
    </script>
</body>
</html>

13_对象格式侦听器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <input type="text" v-model="username"/>
    </div>
    <script src="lib/vue.min.js"></script>
    <script>
        var vm = new Vue({
            el:'#app',
            data:{
                username:''
            },
            watch: {
                // 方法格式侦听器 (缺点:1、页面初始化时无法自动执行调用,2、无法侦听到对象中的属性变化)
                // username(newVal,oldVal){
                //     console.log(newVal,oldVal);
                // }

                // 对象格式侦听器 (通过设置immediate参数实现页面初始化时自动执行)
                username:{
                    // handler 侦听数据变化时执行函数
                    handler(newVal,oldVal){
                        console.log('侦听器被执行了');
                    },
                    // immediate 页面初始化时是否执行侦听函数(默认false不执行/true时则自动执行)
                    immediate:true
                }
            }
        })
    </script>
</body>
</html>

14_watch深度侦听

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <input type="text" v-model="info.username"/>
    </div>
    <script src="lib/vue.min.js"></script>
    <script>
        var vm = new Vue({
            el:'#app',
            data:{
                info:{
                    username:'admin',
                    password:'123456'
                }
            },
            watch: {
                info:{
                    handler(newVal){
                        console.log(newVal);
                    },
                    // 开启深度监听
                    deep:true
                }

                // 'info.username'(newVal){
                //     console.log(newVal);
                // }

            }
        })
    </script>
</body>
</html>