Vue

Vue的axios快速上手

一 axios的简介说明

它是Vue的一个通信框架,Vue本身有vue-resource,但是作者感觉是在重复造轮子,就弃用了deprecated自己的vue-resource,转而拥抱采用adapted第三方的axios.

二 axios的特性

支持数据转换,前端和后端的数据自动转换,自动转换请求的数据和响应的数据;

支持链式编程,类似Java8的Stream流式编程;

更多特性可查看:https://www.npmjs.com/package/axios介绍的关于Feature章节部分,作为学习新手,先了解个概貌,继续往前走,等二刷三刷的时候再深入知识点儿。

  • Make XMLHttpRequests from the browser
  • Make http requests from node.js
  • Supports the Promise API
  • Intercept request and response
  • Transform request and response data
  • Cancel requests
  • Automatic transforms for JSON data
  • Client side support for protecting against XSRF

三 编写一个axios的例子程序

1准备json文件data.json
{
    "name":"Google",
    "url":"http://google.com",
    "links":[
        {
            "name":"163",
            "url": "http://www.163.com"
        },
        {
            "name":"数据库敲门人",
            "url":"http://knockatdatabase.com"
        }
    ]
}
2 编写HTML文件,引入Vue.js和axios.js
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>axios通信</title>
    <!-- 引入Vue.js和axios文件 -->
        <script src="vue.js" type="text/javascript" charset="utf-8"></script>
        <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
    </body>
</html>

3 ViewModel里定义一个函数,指定返回值为info

然后,在div里,让其引用info这个返回的对象的属性,info.url和info.name。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>axios通信</title>
        <!-- 引入Vue.js和axios文件 -->
        <script src="vue.js" type="text/javascript" charset="utf-8"></script>
        <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
        <div id="app">
            <div >
                name:{{info.name}}
            </div>
            <div >
                url:{{info.url}}
            </div>
        </div>

        <script type="text/javascript">
            let app= new Vue({
                el:"#app",
                data(){
                    return{
                        info:{
                            name:'',
                            url:'',
                        }
                    }
                }
            })          
        </script>
    </body>
</html>
4 开始写axios

注意,这里的mounted,是Vue实例的生命周期的一部分。其写在这里的原因,类似于之前的jQuery的$function的用法。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>axios通信</title>
        <!-- 引入Vue.js和axios文件 -->
        <script src="vue.js" type="text/javascript" charset="utf-8"></script>
        <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
        <div id="app">
            <div >
                name:{{info.name}}
            </div>
            <div >
                url:{{info.url}}
            </div>
        </div>

        <script type="text/javascript">
            let app= new Vue({
                el:"#app",
                data(){
                    return{
                        info:{
                            name:'',
                            url:'',
                        }
                    }
                },
                // 这里的mounted类似于jQuery的$function的用法,当然,jQuery我还没用过。
                mounted() {
                    // 然后,开始写axios读取json数据文件,读取之后,then,这就类似于lambda表达式,
                    // 接下来,它的响应的对象this.info被赋值为response.data,
                    // 这里的this.$data.info可以直接简写成this.info=response.data
                    axios.get('data.json').then(response=>(this.$data.info=response.data))
                }
            })          
        </script>
    </body>
</html>

至此,一个简单的axios demo程序就写好了。我们在browser里可以看到效果。

5 axios返回从json中读取的数组

无非就是另外添加一个div,使用ul,然后使用v-for,即Vue的列表渲染。

需要注意的是,v-for里要写link/item in info.links。其中的links是axios从json文件里读取的数据,前面要带个info对象作为前缀。

6 给返回的URL加上a标签

最终的代码如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>axios通信</title>
        <!-- 引入Vue.js和axios文件 -->
        <script src="vue.js" type="text/javascript" charset="utf-8"></script>
        <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js" type="text/javascript" charset="utf-8"></script>
    </head>
    <body>
        <div id="app">
            <div >
                name:{{info.name}}
            </div>
            <div >
                url: <a v-bind:href="info.url" target="_blank">{{info.url}}</a> 
            </div>
            <!-- 无非就是另外添加一个div,使用ul,然后使用v-for,即Vue的列表渲染。
需要注意的是,v-for里要写link/item in info.links。其中的links是axios从json文件里读取的数据,前面要带个info对象作为前缀。
  -->
            <div >
                <li v-for="link in info.links" v-bind:key="link.name">
                    {{link.name}} --- <a   v-bind:href="link.url" target="_blank">{{link.url}}</a> 
                </li>
            </div>
        </div>

        <script type="text/javascript">
            let app= new Vue({
                el:"#app",
                data(){
                    return{
                        info:{
                            name:'',
                            url:'',
                        }
                    }
                },
                // 这里的mounted类似于jQuery的$function的用法,当然,jQuery我还没用过。
                mounted() {
                    // 然后,开始写axios读取json数据文件,读取之后,then,这就类似于lambda表达式,
                    // 接下来,它的响应的对象this.info被赋值为response.data,
                    // 这里的this.$data.info可以直接简写成this.info=response.data
                    axios.get('data.json').then(response=>(this.$data.info=response.data))
                }
            })          
        </script>
    </body>
</html>

四小结

对Vue的使用目前还处于上手接触阶段,暂时没有更多个人的对于Vue的理解和想法。我想,随着我主键的对Vue越来越熟悉,经验慢慢丰富,理解更深。我就能写出、表达出我个人的理解和想法。

留言