[ Vue2基础结构与指令学习 | 青训营笔记]

79 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

1.引入Vue

  1. 在官方文档中获取引入Vue的方式,网址:v2.cn.vuejs.org/v2/guide/ image.png

  2. 选择开发环境版本,复制代码到html页面中,完成引入。

image.png

2.Vue基础结构

  1. 在Vue的基础结构中,有两部分内容,一部分是页面显示中的内容。

    • 在下述例子中,存在一个id为basic的div,而里面包含的内容为{{message}}。message为后续将会传入的变量,需要用{{}}(差值表达式)括起,否则作为普通文本内容“message”存在。
        <body>
            <div id="basic">
                {{message}}
            </div>
        </body>
  1. 另一部分是JavaScript中的内容。

    • 创建一个名为basic(名称可变)的Vue实例,并在Vue()中传入参数el、data和method。

    • el为挂载点,即Vue实例管理的元素,Vue实例只会作用在其范围内,可以使用id选择器、类选择器等。注意:若使用元素选择器,不建议选择<html><body>这两个html元素。

      image.png

    • data为数据对象,其内容为变量名和变量值,变量值可以是字符串类型、数值类型、数组类型、对象类型等。

      image.png

    • method为响应操作的方法,当用户在页面中进行指定操作时触发,进行更改数据对象的值或在控制台中输出内容等。

      image.png

例:

        <script>
                var basic = new Vue({
                    el: '#basic',
                    data:{
                        message: 'Hello Vue!'
                    },
                    method:{

                    }
                })
        </script>

运行效果:

image.png

完整代码:

3.Vue基础指令

  1. v-text

设置标签的文本内容。

        <div id="basic">
                <!-- 文本显示 -->
                <h2 v-text="message+'!'"></h2>
        <div>
        <script>
                var basic = new Vue({
                    el:"#basic",
                    data:{
                                message:"你好!"
                         }
                    })
        <script>

运行效果:

image.png

  1. v-html

设置标签内文本并识别为HTML代码,相当于innerHTML功能。

        <div id="basic">
               <!-- 需要解析html结构,就用v-html -->
               <p v-text="content"></p>
        <div>
        <script>
                var basic = new Vue({
                    el:"#basic",
                    data:{
                               content:"<a href='https://juejin.cn/'>掘金</a>",
                         }
                    })
        <script>

运行结果:

image.png

如果将v-html改为v-text,则运行结果为纯文本<a href='https://juejin.cn/'>掘金</a>

  1. v-on

事件绑定,可以用@代替。

        <div id="basic">
               <input type="button" value="v-on"  v-on:click="onclick">
        <div>
        <script>
                var basic = new Vue({
                    el:"#basic",
                    methods: {
                        onclick:function(){
                            alert("click v-on");
                        },
                    }
                })
        <script>

运行结果为v-on按钮,点击后弹出click v-on消息。

改成双击触发,并且用@进行简写后,代码为:

        <div id="basic">
                双击+简写  <!-- 注意是dbl+click -->
                <input type="button" value="v-on"  @dblclick="onclick">
        <div>

除了点击触发alert以外,也可以通过结合变量,实现改变页面显示内容的效果。

        <div id="basic">
                <button @click="sub">-</button>
                <span>{{ num }}</span>
                <button @click="add">+</button>
        <div>
        <script>
                var basic = new Vue({
                    el:"#basic",
                    data:{
                        num:1
                    }
                    methods: {
                        sub:function(){
                            //console.log("sub")
                            if(this.num > 0){
                                this.num--;
                            }
                            else{
                                alert("到底了,不能再减了!");
                            }
                        },
                        add:function(){
                            //console.log("add")
                            if(this.num < 10){
                                this.num++;
                            }
                            else{
                                alert("到顶了,不能再加了!");
                            }
                        }
                    }
                })
        <script>

运行结果:

image.png

每点击一次-按钮,数值-1,每点击一次+按钮,数值+1。当数值为1时点击-按钮,或当数值为10时点击+按钮,都会弹出消息提示已到极限,无法继续减小或增大。

  1. v-for

将所在标签及其内部内容,根据需要循环的元素个数,进行拷贝。

        <div id="basic">
                <h2 v-for="item in date">
                    {{item.name}}
                </h2>
                <input type="button" value="点击增加日期项" @click="add">
                <input type="button" value="点击删除第一个日期项" @click="remove">

        <div>
        <script>
                var basic = new Vue({
                    el:"#basic",
                    data:{
                        date:[
                                {name:"1月1号"},
                                {name:"1月2号"},
                                {name:"1月2号"}
                             ],
                    }
                    methods: {
                        add:function(){
                            this.date.push({name: "1月n号"});
                        },
                        remove:function(){
                            //shift方法,移除第一个元素
                            this.date.shift();
                        }
                    }
                })
        <script>

运行结果:点击左侧按钮,在日期列表最下方增加一个“1月n号”项;点击右侧按钮,则删除最上方的一项。

image.png

  1. v-show

设置元素是否显示。其值为真,元素显示,其值为假,元素不显示。

        <div id="basic">
                <!-- 点击按钮,切换显示状态 -->
                <button @click="changeIsShow">切换图片显示状态</button>
                <img src="E:/picture/1.jpg" v-show="isShow" >
        <div>
        <script>
                var basic = new Vue({
                    el:"#basic",
                    data:{
                        isShow:false
                    }
                    methods: {
                        changeIsShow:function(){
                            this.isShow = !this.isShow;
                        }
                    }
                })
        <script>

运行结果为“切换图片显示状态”按钮,点击后isShow为true,图片出现,再次点击后isShow为false,图片消失。

  1. v-if

设置元素是否存在,与v-show类似,但v-show为隐藏元素,v-if为删除该元素。

        <div id="basic">
                <input type="button" value="切换p标签显示" @click="toggleIsShow">
                <!-- v-if是否存在,适用于不常切换状态的元素 -->
                <p v-if="pIsShow">p标签</p>
                <!-- v-show是否显示,适用于频繁切换状态的元素 -->
                <p v-show="pIsShow">p标签 - v-show</p>
        <div>
        <script>
                var basic = new Vue({
                    el:"#basic",
                    data:{
                        pIsShow:false
                    }
                    methods: {
                        toggleIsShow:function(){
                            this.pIsShow = !this.pIsShow;
                        },
                    }
                })
        <script>

运行结果:在控制台中,pIsShow为false时,由v-if控制的p标签不存在,而v-show控制的p标签虽然不显示,却是存在的。

image.png

点击按钮后,两个p标签都显示,v-if控制的p标签也在控制台中出现。

image.png

  1. v-bind

设置元素属性,如:src(图片地址),title(鼠标移入会显示的内容),class(元素所属类)等。

        <div id="basic">
                <img v-bind:src="imgSrc" alt="" v-bind:title="imgTitle+'!!!'" v-bind:class="{active:isActive}" @click="toggleIsActive">
        <div>

在使用时,v-bind可以省略,直接用:表示。

        <div id="basic">
                 <img :src="imgSrc" alt="" :title="imgTitle+'!!!'" :class="{active:isActive}" @click="toggleIsActive">
        <div>

*active为自定义的css样式,在当前例子中,由isActive控制是否采用该样式。

css样式:

        <head>
                 <style>
                    .active{
                        border: 10px solid blue;
                    }
                </style>
        </head>

JavaScript:

        <script>
                var basic = new Vue({
                    el:"#basic",
                    data:{
                        imgSrc:"E:/picture/1.jpg",
                        imgTitle:"图片",
                        isActive:true
                    }
                    methods: {
                        toggleIsActive:function(){
                            this.isActive=!this.isActive;
                        },
                    }
                })
        <script>

运行结果为一张地址为imgSrc的图片,点击出现蓝色边框,再次点击消失,鼠标移入图片时显示“图片!!!”。

  1. v-model

获取和设置表单的值,且具有双向数据绑定,在表单上修改内容,或在通过操作改变表单所绑定的变量值时,另一方也会随之改变。

        <div id="basic">
                <input type="text" v-model="model_Message" @keyup.enter="getMessage">
                <input type="button" value="修改内容" @click="setMessage">
                <h2>{{model_Message}}</h2>
        <div>
        <script>
                var basic = new Vue({
                    el:"#basic",
                    data:{
                         model_Message:"V-MODEL"
                    }
                    methods: {
                        getMessage:function(){
                            alert(this.model_Message);
                        },
                        setMessage:function(){
                            this.model_Message = "...";
                        }
                    }
                })
        <script>

运行结果:修改文本框内容时,下方显示内容随之改变,输入任意内容后按下回车键,即会弹出所输入的内容的消息。点击“修改内容”按钮,文本框及文本框下方内容都被更新为“...”,此时按下回车键,所弹出消息的内容也为“...”。

image.png