Day_02 Vue第二阶段

本文详细介绍了Vue.js的开发工具DevTools的使用,列表渲染、条件渲染、属性绑定、计算器实现、表单操作和监听器的运用,以及Vue的生命周期。通过实例展示了如何在实际开发中运用这些关键特性,帮助读者深入理解并掌握Vue.js的核心知识。

01-devtool工具使用(掌握)

  • 开发步骤

    • ①解压vuedevtools
    • ②打开google浏览器,打开扩展程序
    • ③开启开发者模式,加载已解压的扩展程序
  • ①解压vuedevtools

  • ②打开google浏览器,打开扩展程序

    image-20220305091004243

  • ③开启开发者模式,加载已解压的扩展程序

    • image-20220305091211351
    • image-20220305091100803

02-Vue列表渲染(掌握)

  • 概述

    • Vue中通过v-for指令来实现将列表渲染到页面
  • 语法

    //item : 列表中的元素
    //itemList : 列表
    v-for="item in itemList"
    
    //index : 元素在列表中的位置
    v-for="(item,index) in itemList"
    
  • 代码实现

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>02-Vue列表渲染</title>
    </head>
    <body>
    <div id="app">
    
        <table border="1px" cellpadding="10px" cellspacing="0px" rules="all" width="400px" height="300px">
            <tr>
                <th>序号</th>
                <th>编号</th>
                <th>姓名</th>
                <th>年龄</th>
            </tr>
    
            <tr v-for="(stu,index) in stuList">
                <td v-text="index"></td>
                <td v-text="stu.stuId"></td>
                <td v-text="stu.stuName"></td>
                <td v-text="stu.age"></td>
            </tr>
    
        </table>
    
    
    </div>
    
    </body>
    <script src="js/vue.js"></script>
    <script>
    
        var vue = new Vue({
            el: "#app",
            data: {
                stuList:[
                    {
                        stuId:1,
                        stuName:"张三",
                        age:18
                    },
                    {
                        stuId:2,
                        stuName:"李四",
                        age:19
                    },
                    {
                        stuId:3,
                        stuName:"王五",
                        age:20
                    }
                ]
    
    
            },
            methods: {}
        })
    
    </script>
    </html>
    

03-Vue条件渲染(掌握)

  • 概述

    • 根据条件决定是否渲染指定组件。
    • v-if : 组件直接不在dom树中。
    • v-show :组件还在dom书中,只是修改了display=none
  • 适用场景

    • 用于登录状态的显示。
  • 代码实现

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>03-Vue条件渲染</title>
    </head>
    <body>
    <div id="app">
    
        <span v-if="flag">if的span</span><br>
        <span v-show="flag">show的span</span>
    
    </div>
    
    </body>
    <script src="js/vue.js"></script>
    <script>
    
        var vue = new Vue({
            el: "#app",
            data: {
                flag: false
            },
            methods: {}
        })
    
    </script>
    </html>
    

04-Vue属性绑定(掌握)

  • 概述

    • 使用"v-bind:属性"指令,给元素的属性设置Vue实例中的变量值,也可以简写成":属性"
  • 代码实现

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>04-Vue属性绑定</title>
    </head>
    <body>
    <div id="app">
    
        <input type="text" v-bind:value="msg">
        <input type="text" :value="msg">
    
        <a :href="myUrl">跳转</a>
    
    </div>
    
    </body>
    <script src="js/vue.js"></script>
    <script>
    
        var vue = new Vue({
            el: "#app",
            data: {
                msg: "fuck",
                myUrl:"http://www.baidu.com"
            },
            methods: {}
        })
    
    </script>
    </html>
    
  • 注意事项

    • 需要接收Vue容器中的组件的输入值就需要用到双向绑定v-model

05-制作计算器(掌握)

  • 代码实现

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>05-制作计算器</title>
    </head>
    <body>
    <div id="app">
        <input type="text" v-model="num1">
        <select v-model="operate">
            <option value="+"></option>
            <option value="-"></option>
            <option value="*"></option>
            <option value="/"></option>
        </select>
        <input type="text" v-model="num2">
        = <span v-text="result"></span><br>
        <button @click="calculate()">计算</button>
    </div>
    
    </body>
    <script src="js/vue.js"></script>
    <script>
    
        var vue = new Vue({
            el: "#app",
            data: {
                num1: 1,
                num2: 1,
                operate: "+",
                result: 2
            },
            methods: {
                calculate() {
                    //执行计算
                    var result = eval(this.num1 + this.operate + this.num2);
                    console.log(result);
                    this.result = result;
                }
            }
        })
    
    </script>
    </html>
    

06-表单操作(掌握)

  • 代码准备

    <form >
        姓名:<input type="text" /><br><br>
        密码:<input type="text" /><br><br>
    
        性别:<input type="radio" name="sex" value="male" ><input type="radio" name="sex" value="female" ><br/><br>
    
    
        爱好:<input type="checkbox" value="java" >java
        <input type="checkbox" value="html">html
        <input type="checkbox" value="php">php<br/><br>
        职业:
        <select >
            <option value="java工程师">java工程师</option>
            <option value="html工程师">html工程师</option>
            <option value="全栈工程师">全栈工程师</option>
        </select><br><br>
    
        个人简介<textarea ></textarea> <br><br>
    
    
        <input type="submit" value="提交修改" />
    
    
    </form>
    
  • 代码实现

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>20-Vue的事件处理</title>
    </head>
    <body>
    <div id="app">
        <form @submit.prevent="fn1()">
            姓名:<input type="text" v-model="user.userName"/><br><br>
            密码:<input type="text" v-model="user.userPwd"/><br><br>
    
            性别:<input type="radio" name="sex" value="male" v-model="user.gender"><input type="radio" name="sex" value="female" v-model="user.gender"><br/><br>
    
    
            爱好:<input type="checkbox" value="java" v-model="user.hobbys">java
            <input type="checkbox" value="html" v-model="user.hobbys">html
            <input type="checkbox" value="php" v-model="user.hobbys">php<br/><br>
            职业:
            <select v-model="user.job">
                <option value="java工程师">java工程师</option>
                <option value="html工程师">html工程师</option>
                <option value="全栈工程师">全栈工程师</option>
            </select><br><br>
    
            个人简介<textarea v-model="user.introduce"></textarea> <br><br>
    
    
            <input type="submit" value="提交修改"/>
    
    
        </form>
    </div>
    
    </body>
    <script src="js/vue.js"></script>
    <script>
    
        var vue = new Vue({
            el: "#app",
            data: {
                user: {
                    userName: "",
                    userPwd: "",
                    gender: "male",
                    hobbys: [],
                    job: "java工程师",
                    introduce: "这个人很懒,什么都没留下。"
                }
            },
            methods: {
    
                fn1(){
                    console.log(this.user);
                }
    
            }
        })
    
    </script>
    </html>
    

07-Vue监听器(掌握)

  • 概述

    • 监听数据的变化
  • 分类

    • ①监听简单类型数据的变化
    • ②监听引用类型数据的变化
  • ①监听简单类型数据的变化

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>07-Vue监听器</title>
        <!--①监听简单类型数据的变化-->
    </head>
    <body>
    <div id="app">
        <input type="text" v-model="info" @change="fn1()">
    </div>
    
    </body>
    <script src="js/vue.js"></script>
    <script>
    
        var vue = new Vue({
            el: "#app",
            data: {
                info: ""
            },
            methods: {
                fn1() {
                    console.log("change新值 : " + this.info)
                }
            },
            watch: {
                info(newVal, oldVal) {
                    console.log("新值 : " + newVal);
                    console.log("老值 : " + oldVal);
                }
            }
        })
    
    </script>
    </html>
    
  • ②监听引用类型数据的变化

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>07-Vue监听器</title>
        <!--②监听引用类型数据的变化-->
    </head>
    <body>
    <div id="app">
        <input type="text" v-model="user.userName" @change="fn1()">
    </div>
    
    </body>
    <script src="js/vue.js"></script>
    <script>
    
        var vue = new Vue({
            el: "#app",
            data: {
                user: {
                    userName: ""
                }
    
            },
            methods: {
                fn1() {
                    console.log("change新值 : " + this.user.userName);
                }
            },
            watch: {
    
                "user.userName"(newVal, oldVal) {
                    console.log("新值 : " + newVal);
                    console.log("老值 : " + oldVal);
                }
                /*
                "user.userName": {
                    handler: function (newVal, oldVal) {
                        console.log("新值 : " + newVal);
                        console.log("老值 : " + oldVal);
                    }
                }*/
            }
        })
    
    </script>
    </html>
    

08-Vue的生命周期(难点)

  • 钩子函数

    • beforeCreate : 创建vue对象后,初始化事件和钩子函数,未初始化data和methods
    • created : 创建vue对象后,初始化data和methods
    • beforeMount : 生成虚拟dom树,虚拟dom树没有挂载到页面
    • mouted : 根据虚拟dom树生成真实dom树,真实dom树挂载到页面
    • beforeDestroy : Vue对象销毁之前
    • destroyd : Vue对象销毁完成
    • beforeUpdate : 修改后,生成虚拟dom树
    • updated : 修改后,根据虚拟dom树生成真实dom树
  • 代码实现

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>08-Vue的生命周期</title>
    </head>
    <body>
    <div id="app">
        <span v-text="msg" id="spn"></span><br>
        <button @click="myDestroy()">销毁</button><br>
        <button @click="updateMsg()">修改msg</button>
    </div>
    
    </body>
    <script src="js/vue.js"></script>
    <script>
    
        var vue = new Vue({
            el: "#app",
            data: {
                msg: "hello"
            },
            methods: {
                show() {
                    console.log("show show show");
                },
                myDestroy(){
                    this.$destroy();
                },
                updateMsg(){
                    this.msg = "fuck";
                }
            },
            beforeCreate() {//没有初始化data和methods
                console.log("--------------------------------beforeCreate--------------------------------");
                console.log("msg = " + this.msg);
                this.show();
            },
            created(){//初始化data和methods
                console.log("--------------------------------created--------------------------------");
                console.log("msg = " + this.msg);
                this.show();
            },
            beforeMount(){//生成虚拟dom树
                console.log("--------------------------------beforeMount--------------------------------");
                var spnEle = document.getElementById("spn");
                console.log(spnEle.innerHTML);
            },
            mounted(){//将虚拟dom树变成了真实dom树
                console.log("--------------------------------mounted--------------------------------");
                var spnEle = document.getElementById("spn");
                console.log(spnEle.innerHTML);
    
            },
            beforeDestroy(){
                console.log("--------------------------------beforeDestroy--------------------------------");
            },
            destroyed(){
                console.log("--------------------------------destroyed--------------------------------");
            },
    
            beforeUpdate(){//修改后,生成虚拟dom树
                console.log("--------------------------------beforeUpdate--------------------------------");
                var spnEle = document.getElementById("spn");
                console.log(spnEle.innerHTML);
            },
            updated(){//修改后,生成真实dom树
                console.log("--------------------------------updated--------------------------------");
                var spnEle = document.getElementById("spn");
                console.log(spnEle.innerHTML);
            }
    
        })
    
    </script>
    </html>
    

09-Xml概述(了解)

  • 概述

    • XML : extensive markup language , 可扩展标签语言
    • HTML : hyper text markup language , 超文本标签语言
  • 作用

    • 用来传输和存储数据、作为配置文件。
  • 树结构

    • image-20220305161019660
    <?xml version="1.0" encoding="UTF-8" ?>
    <bookstore>
    
    
        <book category="magic">
            <title lang="english">Harry Potter</title>
            <author>J K. Rowling</author>
            <year>2005</year>
            <price>29.9</price>
        </book>
    
    
    </bookstore>
    

10-Xml组成(了解)

  • 组成
    • 文档声明
    • 属性
    • 元素
    • 注释
    • CDATA

11-Xml约束(了解)

  • 概述
    • 在xml中,标签、标签内容、属性、属性值都可以随意写,这就给开发人员解析xml文件造成困难。
  • 约束
    • DTD约束 : 标签、属性做出限制,比如:mybatis。
    • schema约束 : 标签、标签内容、属性、属性值做出限制,比如:spring

12-DTD约束(了解)

  • 概述

    • 标签、属性做出限制,比如:mybatis。
  • ①内部结合

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE students [
            <!ELEMENT students (student*)>
            <!ELEMENT student (name,age,sex)>
            <!ELEMENT name (#PCDATA)>
            <!ELEMENT age (#PCDATA)>
            <!ELEMENT sex (#PCDATA)>
            <!ATTLIST student id CDATA #REQUIRED>
            <!ATTLIST student classname CDATA #IMPLIED>]>
    <students>
    
    
        <student id="1" classname="WH222222">
            <name>张三</name>
            <age>18</age>
            <sex></sex>
        </student>
    
    
    
    </students>
    
    
  • ②外部结合

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- xml文件中有一个根节点students,students下可以有n个student子节点(包括0个) -->
    <!ELEMENT students (student*)>
    <!-- student节点下,可以有name节点、age节点和sex节点,且name节点、age节点和sex节点是按照先后顺序出现 -->
    <!ELEMENT student (name,age,sex)>
    <!-- 定义name节点,且节点内容的类型为字符  -->
    <!ELEMENT name (#PCDATA)>
    <!-- 定义age节点,且节点内容的类型为字符 -->
    <!ELEMENT age (#PCDATA)>
    <!-- 定义sex节点,且节点内容的类型为字符 -->
    <!ELEMENT sex (#PCDATA)>
    <!-- 给节点student设置属性,属性名称为id,属性的类型为CDATA(字符), #REQUIRED指本属性是必须的  #IMPLIED指属性是可选的 -->
    <!ATTLIST student id CDATA #REQUIRED>
    <!-- 给节点student设置属性,属性名称为classname,属性的类型为CDATA(字符), #REQUIRED指本属性是必须的  #IMPLIED指属性是可选的 -->
    <!ATTLIST student classname CDATA #IMPLIED>
    
    
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE students SYSTEM "students.dtd">
    <students>
    
    
        <student id="1" classname="WH220106">
            <name>张三</name>
            <age>18</age>
            <sex></sex>
        </student>
    
    
    </students>
    
    

13-SCHEMA约束(了解)

  • 概述

    • 标签、标签内容、属性、属性值做出限制,比如:spring
  • 代码实现

    <?xml version="1.0" encoding="UTF-8"?>
    <schema xmlns="http://www.w3.org/2001/XMLSchema"
          targetNamespace="http://www.example.org/students"
          elementFormDefault="qualified">
       <!-- element:申明元素,包括根元素和子元素 这里就是申明根元素class -->
       <element name="students">
          <!-- 复杂元素 -->
          <complexType>
             <!-- squence:子元素按照顺序 1,子元素如果只有一种,那么就写一个,比如student元素 2,子元素如果有多种,那么就按想要的顺序写,比如:name,age,sex -->
             <sequence>
                <!-- 申明子元素student minOccurs:最少出现次数 maxOccurs:最大出现次数,数值或unbounded(无限大) -->
                <element name="student" minOccurs="0" maxOccurs="unbounded">
                   <complexType>
                      <sequence>
                         <!-- 申明子元素name -->
                         <element name="name" type="string"></element>
                         <!-- 申明子元素age simpleType:元素age是一个简单元素 restriction:age的取值范围在1~150之间 -->
                         <element name="age">
                            <simpleType>
                               <restriction base="integer">
                                  <minInclusive value="1"></minInclusive>
                                  <maxInclusive value="150"></maxInclusive>
                               </restriction>
                            </simpleType>
                         </element>
    
                         <!-- 申明子元素 sex restriction:取值范围在"男"和"女" -->
                         <element name="sex">
                            <simpleType>
                               <restriction base="string">
                                  <enumeration value=""></enumeration>
                                  <enumeration value=""></enumeration>
                               </restriction>
                            </simpleType>
                         </element>
                      </sequence>
                      <!--
                         定义了一个属性id
                         use="required":属性是必须的
                         <pattern value="java_\d{4}"></pattern>:id的值必须满足这个正则表达式:以java_开头,后面跟四个数字
                       -->
                      <attribute name="id" use="required">
                         <simpleType>
                            <restriction base="string">
                               <pattern value="WH-\d{4}"></pattern>
                            </restriction>
                         </simpleType>
                      </attribute>
                   </complexType>
                </element>
             </sequence>
          </complexType>
       </element>
    </schema>
    
    
    <?xml version="1.0" encoding="UTF-8" ?>
    <students xmlns="http://www.example.org/students">
    
    
        <student id="WH-1234" >
            <name>张三</name>
            <age>110</age>
            <sex></sex>
        </student>
    
    </students>
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值