Vue的一些常用指令

124 阅读2分钟

1.v-html

双大括号语法无法渲染HTML标签,我们需要使用v-html。

    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>v-html</title>
    </head>
    <body>
        <div id="app01">
            <div v-html="vue"></div>
        </div>
        <script src="./vue.js"></script>
        <script>
            let app01 = new Vue({
                el: "#app01",
                data: {
                    vue: '<h1>Hello Vue!</h1>'
                }
            })
        </script>
    </body>
    </html>

2.v-text

类似双大括号语法渲染数据的另一种方式是使用v-text

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>v-html</title>
    </head>
    <body>
        <div id="app01">
            <div v-text="name"></div>
        </div>

        <script src="./vue.js"></script>
        <script>
            let app01 = new Vue({
                el: "#app01",
                data: {
                    name: "dogfa"
                }
            })
        </script>

    </body>
    </html>

3.v-for

用于数组和对象渲染方式 (v-for和v-if需要分开使用)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>v-for</title>
    <script src="../vue模板语法之插值/vue.js"></script>
</head>
<body>
    <div id="app01">
        <h2>dogfa的爱好</h2>
        <ul>
            <li v-for="item in qianqian">{{ item }}</li>
        </ul>
        <h2>学生的爱好</h2>
        <ul>
            <li v-for="stu in students">{{ stu.name }}的爱好是{{ stu.hobby}}</li>
        </ul>
    </div>

    <script>
        let app01 = new Vue({
            el: "#app01",
            data: {
                qianqian: [
                    "学习",
                    "逛街",
                    "美甲"
                ],
                students: [
                    {
                        name: "dogfa",
                        hobby: "girls"
                    },
                    {
                        name: "djb",
                        hobby: "girls"
                    },
                    {
                        name: "oldniu",
                        hobby: "study"
                    }
                ]
            }
        })
    </script>
</body>
</html>

3.v-if

渲染数据的时候,同样也可以使用条件判断 v-if的作用是控制标签的显示,它通过判断添加标签,底层采用的是appendChild来实现的

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>v-if</title>
    <script src="./vue.js"></script>
</head>
<body>
    <div id="app01">
        <div v-if="role == 'shanshan'">
            <h2>欢迎小美女</h2>
        </div>
        <div v-else-if="role == 'longting'">
            <h2>欢迎小龙女</h2>
        </div>
        <div v-else>
            <h2>滚~~~</h2>
        </div>
    </div>

    <script>
        // 请注意看HTML标签元素,v-if底层使用appendChild实现
        let app01 = new Vue({
            el: "#app01",
            data: {
                role: "shanshan"
            }
        })
    </script>
</body>
</html>

4.v-show

与v-if不同的是,v-show通过样式的display控制标签的显示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>v-show</title>
    <script src="./vue.js"></script>
</head>
<body>
    <div id="app01">
        <h1 v-show="isShow">Hello Vue!</h1>
    </div>

    <script>
        // v-show的实现原理是通过控制样式的display
        let app01 = new Vue({
            el: "#app01",
            data: {
                isShow: true
            }
        })
    </script>

</body>
</html>

5.v-bind

绑定属性,不多说了,注意冒号后面跟标签的属性,属性后面的等号指向数据,它可以简写为 :class, :href。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>v-bind</title>
    <style>
        .active {
            background-color: #2b84da;
        }
    </style>
    <script src="./vue.js"></script>
</head>
<body>
    <div id="app01">
        <a v-bind:href='link' v-bind:class="{active: isActive}">去百度</a>
    </div>

    <script>
        // 绑定属性,简写冒号:
        let app01 = new Vue({
            el: "#app01",
            data: {
                link: "https://www.luffycity.com",
                isActive: true
            }
        })
    </script>

</body>
</html>

6.v-on

另一个非常重要的指令是v-on,使用v-on我们可以在标签上面绑定事件,注意我们新建的vue实例app01中多了一个属性,methods,在methods中,是我们具体事件的实现方式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>v-on</title>
    <style>
    </style>
    <script src="./vue.js"></script>
</head>
<body>
    <div id="app01">
        <!--方式一: 绑定一个事件-->
        <a v-bind:href='link'
           v-bind:class="{active: isActive}"
           v-on:click="myClick"
           >去百度</a>
        <!--方式二: 绑定多个事件-->
        <button v-on="{click: myClick,
                       mouseenter: mouseEnter,
                       mouseleave: mouseLeave}">
            点我今晚吃鸡~~~
        </button>
    </div>

    <script>
        // 绑定属性,简写冒号:
        let app01 = new Vue({
            el: "#app01",
            data: {
                link: "https://www.baidu.com",
                isActive: false
            },
            methods: {
                myClick: function () {
                    console.log("大吉大利,今晚吃鸡~~~")
                },
                mouseEnter: function () {
                    console.log("鼠标来了~~~");
                },
                mouseLeave: function () {
                    console.log("鼠标走了~~~");
                }
            }
        })
    </script>

</body>
</html>

7.v-model

我们修改数据之后,修改后的数据能够及时(官方称之为响应式)的渲染到模板层,那么,如果有这样的需求,比如有一个input标签,当用户修改渲染的原始数据后,打印修改后的数据,简单说,我们需要vue实例可以帮我们渲染数据并响应式的监听数据修改,同时我们还需要监听用户行为,如果用户在标签上面修改了数据(之前的修改,指的是通过vue实例app01进行的数据修改),我们需要获取到数据,针对这个需求,我们可以使用v-mode指令。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>v-model</title>
</head>
<body>
    <div id="app01">
        <p>请选择你的性别</p>
        <br>
        <input v-model="name"/>
        <p><input type="text" v-model="name"/></p>
        <p>
            <input type="checkbox" value="男" v-model="gender"/>
            <input type="checkbox" value="女" v-model="gender"/>
        </p>
        <br>
        {{ name }}
        {{ gender }}

        <p>请选择你的女朋友</p>
        <select name="" id="" v-model="girlFriends">
            <option>dogfa</option>
            <option>djb</option>
            <option>oldniu</option>
        </select>
        <br>
        {{ girlFriends }}

        <p>
            <textarea v-model="article"></textarea>
        </p>
        <br>
        {{ article }}
    </div>
    <script src="./vue.js"></script>
    <script>
        let app01 = new Vue({
            el: "#app01",
            data: {
                name: "dogfa",
                gender: [],
                girlFriends: [],
                article: "这是一篇文章",
            }
        })
    </script>
</body>
</html>

8.指令修饰符

用户可以输入任何数据类型,但有时候,我们需要限定用户输入的数据类型,可以在指令后面加上number修饰符。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./vue.js"></script>
</head>
<body>
    <div id="app01">
        <table border="1">
            <thead>
                <tr>
                    <th>学科</th>
                    <th>成绩</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>Python基础</td>
                    <td><input type="text" v-model.number="python"/></td>
                </tr>
                <tr>
                    <td>前端</td>
                    <td><input type="text" v-model.lazy="web"/></td>
                </tr>
                <tr>
                    <td>Django</td>
                    <td><input type="text" v-model.trim="django"/></td>
                </tr>
            </tbody>
        </table>
    </div>

    <script>
        let app01 = new Vue({
            el: "#app01",
            data: {
                python: 75,
                web: 98,
                django: 88
            }
        })
    </script>

</body>
</html