vue基础知识 中

54 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情

1. Vue组件

组件是 Vue.js 最强大的功能之一。

组件可以扩展 HTML 元素,封装可重用的代码。

<div id="app">

<!--    组件:传递给组件中的值:props-->

    <qinjiang v-for="item in items" v-bind:qin="item"></qinjiang>

</div>

<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>

<script>

    //定义一个vue组件component

    Vue.component("qinjiang", {

        props: ['qin'],

        template: '<li>{{qin}}</li>'

    });

    var vm = new Vue({

        el: "#app",

        data: {

            items: ["java", "linux", "前端"]

        },

    });

</script>
  • v-for="item in items":遍历vue 实例中定义的名为items的数组,并创建同等数量的组件

  • v-bind:qin="item":将遍历的item项绑定到组件中props定义的名为qin属性上;等号左边的qin为props定义的属性名,右边的为"item in items"中遍历item项的值

2. Vue:axios异步通信

Axios是一个开源的可以用在浏览器端和Node JS的异步通信框架, 她的主要作用就是实现AJAX异步通信,其功能特点如下:

  • 从浏览器中创建XMLHttpRequests

  • 从node.js创建http请求

  • 支持Promise API JS中链式编程

  • 拦截请求和响应

  • 转换请求数据和响应数据

  • 取消请求

  • 自动转换JSON数据

  • 客户端支持防御XSRF(跨站请求伪造)

 data.json

{
 "name": "kuangshen",
 "url": "http://baidu.com",
 "page": 1,
 "isNonProfit": true,
 "address": {
   "street": "含光门",
   "city":"陕西西安",
   "country": "中国"
 },
 "links": [
   {
     "name": "bilibili",
     "url": "http://cgcd"
   },
   {
     "name": "狂神说",
     "url": "http://cgcd"
   },
   {
     "name": "百度",
     "url": "http://cgcd"
   }
 ]
}
<div id="vue" >
    <div>{{info.name}}</div>
<!--    <div>地名:{{info.name}}</div>-->
<!--    <div>地址:{{info.address.country}}&#45;&#45;{{info.address.city}}&#45;&#45;{{info.address.street}}</div>-->
    <div>链接:<a v-bind:href="info.url">{{info.url}}</a> </div>
</div>

<!--引入js文件-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script type="text/javascript">
    var vm = new Vue({
        el:"#vue",

        //data:属性:vm,下面这个是data方法
        data(){
            return{
                //请求的返回参数格式,必须跟json一样
                info:{
                    name:null,
                    address:{
                        street:null,
                        city:null,
                        country:null
                    },

                }
            }
        },
        mouted(){//钩子函数 链式编程 ES6新特性
            axios.get('../data.json').then(response=>(console.log(response.data)));
        }

    });
</script>

 

3. 计算属性

计算属性:计算出来的结果,保存在属性中 ,内存中运行:虚拟dom

<div id="vue" >

<!--    currentTime1()调用的是currentTime()方法-->

    <p>currentTime1 {{currentTime1()}}</p>

<!--    currentTime2()调用的是currentTime计算属性-->

    <p>currentTime2 {{currentTime2}}</p>

</div>

 

<!--引入js文件-->

<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>

<script type="text/javascript">

    var vm = new Vue({

        el:"#vue",

        data:{

            message:"hello kuangshen"

        },

        methods: {

            currentTime1:function () {

                return Date.now();//返回一个时间数

            }

        },

        computed:{//计算属性 是属性,调用不需加()

            currentTime2:function () {//计算属性: methods.computed不能重名,重名后只会调用methons的方法

                //缓存在内存中,在控制台vm.currentTime2,不会改变数值,而vm.currentTime1()方法会改变

                //控制台中改变message后,currentTime2才会改变

                this.message;

                return Date.now();//返回一个时间数

            }

        }

    });

image.png

image.png

image.png

在控制台vm.currentTime2(),控制台报错;在控制台vm.currentTime2,不报错,但不会改变数值;在控制台vm.currentTime1,无响应;而在控制台vm.currentTime1()方法,数值才会改变

控制台中改变message后,currentTime2才会改变

调用方法时,每次都需要讲行计算,既然有计算过程则必定产生系统开销,那如果这个结果是不经常变化的呢?此时就可以考虑将这个结果缓存起来,采用计算属性可以很方便的做到这点, 计算属性的主要特性就是为了将不经常变化的计算结果进行缓存,以节约我们的系统开销;