一:Axios异步通信

Axios是应用在浏览器端和Node.js的异步通信框架,作用是实现ajax。
axios官网:http://www.axios-js.com/ github下载地址:https://github.com/axios/axios 下载完成后的文件在dist路径里,我们需要的是axios.js

axios网址地址_ios

项目引入axios.js和vue.js

引入后我们需要有一个json数据文件来进行演示,文件放在跟html文件同级的位置:

{
  "employee":{ "name":"Bill Gates", "age":62, "city":"Seattle" }
}

axios网址地址_ios_02

1.获取json数据

html:

<div id="app">

</div>

js:

<script>
    var app = new Vue({
        el: "#app",
        mounted(){
            axios.get('../data.json').then(response=>(console.log(response.data)));
        }
    })
</script>

浏览器访问,查看控制台:

axios网址地址_axios网址地址_03

2.打印json数据

html:

<div id="app">
{{info.employee.name}}
</div>

js:

<script>
    var app = new Vue({
        el: "#app",
        data(){
            return{
                info:{
                    employee:{
                        name: null,
                        age: null,
                        city: null
                    }

                }
            }
        },
        mounted(){
            axios.get('../data.json').then(response=>(this.info=response.data));
        }
    })
</script>

浏览器访问:

axios网址地址_Vue_04

二:计算属性

计算属性computed跟methods方法定义非常类似,但computed的本质是将计算的内容封装为属性,而methods的本质仍然是一个方法。

html:

<div id="app" >
    {{current1}}
</div>

js:

<script>
    var app = new Vue({
        el: "#app",
        data: {
            message: "hello",
        },
        methods: {
            current: function(){
                return Date.now();
            }
        },
        computed: {
            //计算属性
            current1: function(){
                return Date.now();
            }
        }
    })
</script>

总上所述,这里定义了一个计算属性和一个方法,但当这样访问的时候,默认会执行的是计算属性。

axios网址地址_axios网址地址_05

但当我们试图调用方法的时候,current1就不能直接修改成current了,而是current()

<div id="app" >
    {{current()}}
</div>

访问:

axios网址地址_axios网址地址_06

假如说这里没有加括号:

<div id="app" >
    {{current}}
</div>

访问:

axios网址地址_插槽_07

由此可以得出计算属性和方法的区别,方法仍然是方法本身,而计算属性本身确实属性本身,计算这一步是在虚拟dom中执行的,且计算出的数值储存在了内存中,也就类似于形成了缓存。



三:插槽

这里的插槽个人理解为组件中的微组件,也就是说,组件如果是菜刀,那插槽就是水果刀,菜刀固然好使,但假如说我只是想削一下苹果皮,那使用菜刀就是大材小用了,因此用水果刀更轻便,而且如果我这把水果刀是折叠的还能用完放口袋里,十分方便。而这里的方便也对应着插槽的可拔插功能。

html:

<div id="app" >
    <doto>
        <do-title slot="do-title" v-bind:title="title"></do-title>
        <do-items slot="do-items" v-for="item in todoitems" v-bind:item="item"></do-items>
    </doto>
</div>

js:

<script>
    Vue.component("todo",{
        template: '<div>'+
                    '<slot name="do-title"></slot>' +
                    '<ul>'+
                        '<slot name="do-items"></slot>' +
                    '</ul>'+
                '</div>'
    });
    Vue.component("do-title",{
        props: ["title"],
        template: "<div>{{title}}</div>"
    });
    Vue.component("do-items",{
        props: ["item"],
        template: "<li>{{item}}</li>"
    });
    var app = new Vue({
        el: "#app",
        data: {
            title: "这里是标题部分",
            todoitems: ["A","B","C"]
        }
    });
</script>

访问:

axios网址地址_ios_08



四:自定义事件分发

需求:通过点击对应的删除按钮删除对应的元素。

axios网址地址_插槽_09


打印的内容结构是根据插槽拼接的,数据的根源来自new的Vue实例,如果想要删除,那自然也是删除Vue中data内容,而这一职务是前端能够直接行使而并非插槽能够直接行使的,如果查找试图修改Vue,那只能通过找前端来修改Vue,因此出现了对应的处理机制,自定义事件分发。

html:

<div id="app" >
    <doto>
        <do-title slot="do-title" v-bind:title="title"></do-title>
        <do-items slot="do-items" v-for="(item,index) in todoitems"
                  v-bind:index="index" v-bind:item="item" v-on:remove="removeItems(index)" v-bind:key="inedx"></do-items>
    </doto>
</div>

js:

<script>
    Vue.component("todo",{
        template: '<div>'+
                    '<slot name="do-title"></slot>' +
                    '<ul>'+
                        '<slot name="do-items"></slot>' +
                    '</ul>'+
                '</div>'
    });
    Vue.component("do-title",{
        props: ["title"],
        template: "<div>{{title}}</div>"
    });
    Vue.component("do-items",{
        props: ["item","index"],
        template: "<li>{{item}} <button @click='remove'>删除</button></li>",
         methods: {
            remove: function (index) {
                //自定义事件分法
                 this.$emit('remove',index);
            }
         }
    });
    var app = new Vue({
        el: "#app",
        data: {
            title: "这里是标题部分",
            todoitems: ["A","B","C"]
        },
        methods: {
            removeItems:function (index) {
                this.todoitems.splice(index,1);
            }
        }
    });
</script>


参考资料:
https://www.bilibili.com/video/BV18E411a7mChttps://cn.vuejs.org/