• Vue学录 (第二章)


    写在前面:分享技术,共同进步,有不足请见谅,相关意见可评论告知 ~

    编程路漫漫,学习无止尽!

    缩写

    v-bind

    <a v-bind:href="url">...</a>
    <a :href="url">...</a>
    

    v-on

    <a v-on:click="doSomething">...</a>
    <a @click="doSomething">...</a>
    

    网络通信

    Axios是一个开源的可以用在浏览器端和Node.js的异步通信框架,主要作用就是实现AJAⅩ异步通信。

    功能特点:

    (1)从浏览器中创建 XmlHttpRequests
    (2)从node.js创建http请求
    (3)支持 Promise API (JS中链式编程)
    (4)拦截请求和响应
    (5)转换请求数据和响应数据
    (6)取消请求
    (7)自动转换JSON数据
    (8)客户端支持防御XSRF(跨站请求伪造)

    Github:https://github.com/axios/axios
    中文文档:http://www.axiosjs.com/

    核心 :axios.get()
    之前:$.get() Jquery.ajax()

    <!DOCTYPE html>
    <html lang="en" >
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <style>
        [v-clock]{
            display: none;
        }
    </style>
    <body>
    <div id="app" v-clock>
        <div>{{info.name}}</div>
        <div>{{info.address.street}}</div>
    </div>
    
    <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>
        var vm = new Vue({
            // Model 数据
            el:"#app",
            // data:{         // vm 属性
            //     message:"null"
            // },
            data(){    // 方法
                return{  //请求返回参数须和json 字符串一致
                  info:{
                      name : null,
                      address: {
                          street : null,
                          city:null,
                          county :null
                      },
                      url : null
                  }
                }
            },
            mounted(){   //钩子函数
                axios.get('../data.json').then(response=>(this.info=response.data)) ;
    
            }
        }) ;
    </script>
    </body>
    </html>
    

    注意

    v-clock 防止页面闪烁指令
    mounted(){} 钩子函数
    data() {} 传递数据方法 与 data: vm 属性相异

    在这里插入图片描述

    在这里插入图片描述

    生命周期

    Vue实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载DOM、渲染→更新→渲染、卸载等一系列过程,我们称这是Vue的生命周期。通俗说就是vue实例从创建到销毁的过程,就是生命周期。

    官网跳转
    在这里插入图片描述

    计算属性

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

    实质为属性,区别于方法。
    在这里插入图片描述

    <!DOCTYPE html>
    <html lang="en" xmlns:v-bind="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <div id="app">
        <p>currentTime1: {{currentTime1()}}</p>
        <p>currentTime2: {{currentTime2}}</p>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
    <script>
        var vm = new Vue({
            // Model 数据
            el:"#app",
            data: {
                message: "LZH_Hello"
            },
            methods :{
                currentTime1 : function(){
                    return Date.now() ;
                }
            },
            computed :{
                currentTime2: function(){
                    return Date.now() ;
                }
    
            }
        }) ;
    </script>
    </body>
    </html>
    

    Vue 插槽

    官网链接

    前序代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>solt</title>
    </head>
    <body>
    <div id="app">
    <!--    <ul>-->
    <!--        <li>Java</li>-->
    <!--        <li>C</li>-->
    <!--        <li>Python</li>-->
    <!--    </ul>-->
        <todo>
            <todo-title></todo-title>
            <todo-items></todo-items>
        </todo>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
    <script>
    
        Vue.component("todo",{
            template:
                '<div>' +
                  '<slot></slot>'+
                      '<ul>'+
                        '<slot></slot>'+
                      '</ul>'+
                '</div>'
        });
        Vue.component("todo-title",{
            template: '<div>标题</div>'
        });
    
        Vue.component("todo-items",{
            template:'<li>Java</li>'
        }) ;
        var vm = new Vue({
            // Model 数据
            el:"#app",
            data:{
            }
        }) ;
    </script>
    </body>
    </html>
    

    在这里插入图片描述

    优化代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>solt</title>
    </head>
    <body>
    <div id="app">
    <!--    <ul>-->
    <!--        <li>Java</li>-->
    <!--        <li>C</li>-->
    <!--        <li>Python</li>-->
    <!--    </ul>-->
        <todo>
            <todo-title slot="todo-title" :title="title"></todo-title>
            <todo-items slot="todo-items" v-for="item in todoItems" :item="item"></todo-items>
        </todo>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
    <script>
    
        Vue.component("todo",{
            template:
                '<div>' +
                  '<slot name="todo-title"></slot>'+
                      '<ul>'+
                        '<slot name="todo-items"></slot>'+
                      '</ul>'+
                '</div>'
        });
        Vue.component("todo-title",{
            props:['title'],
            template: '<div>{{title}}</div>'
        });
    
        Vue.component("todo-items",{
            props:['item'],
            template:'<li>{{item}}</li>'
        }) ;
        var vm = new Vue({
            // Model 数据
            el:"#app",
            data:{
                title:"学习内容",
                todoItems:["Java","C","Linux","Python"]
            }
        }) ;
    </script>
    </body>
    </html>
    

    在这里插入图片描述

    自定义事件

    JavaScript 使用参考链接
    通过代码发现,数据项在vue的实例中,但删除操作要在组件中完成,那么组件如何才能删除vue实例中的数据?此时就涉及到参数传递与事件分发,Vue为我们提供了自定义事件的功能,使用this.$emit(自定义事件名,参数),操作过程如下

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>solt</title>
    </head>
    <body>
    <div id="app">
    <!--    <ul>-->
    <!--        <li>Java</li>-->
    <!--        <li>C</li>-->
    <!--        <li>Python</li>-->
    <!--    </ul>-->
        <todo>
            <todo-title slot="todo-title" :title="title"></todo-title>
            <todo-items slot="todo-items" v-for="(item,index) in todoItems"
                        :item="item" v-bind:index="index" v-on:remove="removeItems(index)" :key="index"></todo-items>
        </todo>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
    <script>
    
        Vue.component("todo",{
            template:
                '<div>' +
                  '<slot name="todo-title"></slot>'+
                      '<ul>'+
                        '<slot name="todo-items"></slot>'+
                      '</ul>'+
                '</div>'
        });
        Vue.component("todo-title",{
            props:['title'],
            template: '<div>{{title}}</div>'
        });
    
        Vue.component("todo-items",{
            props:['item','index'],
            template:'<li>{{index}}----{{item}}<button @click="remove">删除</button></li>',
            methods :{
                remove : function(index){
                    // 自定义事件分发
                    this.$emit('remove',index) ;
                }
            }
        }) ;
        var vm = new Vue({
            // Model 数据
            el:"#app",
            data:{
                title:"学习内容",
                todoItems:["Java","C","Linux","Python"]
            },
            methods:{
                removeItems : function(index){
                    console.log("删除了"+this.todoItems[index]+"OK");
                    this.todoItems.splice(index,1) ;
                }
            }
        }) ;
    </script>
    </body>
    </html>
    
  • 相关阅读:
    HDU 3695 Computer Virus on Planet Pandora
    codeforces 706D Vasiliy's Multiset
    HDU 2222 Keywords Search
    POJ 2348 Euclid's Game
    HDU 1079 Calendar Game
    js选项卡的实现方法
    实现鼠标悬浮切换标题和内容
    js实现鼠标悬浮切换 setTab 代码实现
    自学Node.js: WebStorm+Node.js开发环境的配置
    windows 下安装nodejs
  • 原文地址:https://www.cnblogs.com/lzhCreate/p/13632284.html
Copyright © 2020-2023  润新知