Vue2---(插值表达式,指令,属性绑定)

318 阅读1分钟

插值表达式

普通插值表达式

插入数据: 在标签尖括号中使用{{}}插入js表达式:变量,函数调用,三目运算等等

<div class="box">
        <h1>{{name}}</h1>
        <h2>{{sex}}</h2>

    </div>
    <script>
        new Vue({
            el: ".box",
            data: {
                name: "dsl",
                sex: "man"
            }
        })
    </script>

image.png

文本指令

v-html:基于innerHTML,可以识别标签

v-text:基于innerText,不能识别标签

v-pre:插值表达式会被识别为文本,而不是js语言

v-cloak:加上这个属性的标签相当于在虚拟构建这个节点时会有这个属性,等到打他数据生成时,这个属性会自动去掉,利用这个特性可以解决vue第一次加载时页面闪烁的问题

<div class="box">
        <p v-text="msg1"></p>
        <p v-html="msg2"></p>
        <p v-pre>{{msg3}}</p>

    </div>
    <script>
        new Vue({
            el: ".box",
            data: {
                msg1: "<b>11111</b>",
                msg2: "<b>22222</b>",
                msg3: "33333",

            }
        })
    </script>

image.png

解决页面闪烁的问题:

1.使用文本指令(尽量使用):v-html,v-text,v-pre

2.$mount

3.给标签加上v-cloak属性,利用属性选择器将其display设置为none

<style>
    [v-clock] {
        display: none;
    }
</style>

<body>
    <!-- 解决页面加载闪烁问题,添加v-cloak属性 设置display为none 执行vue时会移除v-cloak属性 -->
    <!-- 使用v-html,v-text -->
    <div class="box" v-clock>
        <p>{{msg1}}</p>
        <p>{{msg2}}</p>
        <p>{{msg3}}</p>
        <!-- v-text 底层  xx.innerText="" v-html 底层  xx.innerHTML="" -->
        <p v-text="msg1"></p>
        <p v-html="msg2"></p>

    </div>
    <script>
        new Vue({
            el: ".box",
            data: {
                msg1: "<b>11111</b>",
                msg2: "<b>22222</b>",
                msg3: "33333",

            }
        })
    </script>
</body>

属性绑定

属性绑定:所有标签中属性绑定js中变量

标准写法:

<标签 v-bind:属性名="要绑定的Vue对象的data里的属性名"></标签>

语法糖:

<标签 :属性名="要绑定的Vue对象的data里的属性名"></标签>

列1:

 <div id="box">

        <a v-bind:href="baidu">百度</a>
        <!-- 语法糖 -->
        <a :href="juejin">掘金</a>
        <input type="text" :value="value">
    </div>
    <script>
        new Vue({
            el: "#box",
            data: {
                baidu: "https://www.baidu.com/",
                juejin: "https://juejin.cn/",
                value: "12312313"
            }
        })
    </script>

image.png

列2:

    <div id="box">
        头像:<img :src="touxiang"><br>
        昵称:<span v-html="name"></span><br>
        ip地址:<span v-html="location"></span><br>
        发布日期:<span v-html="date"></span><br>
        文本:<span v-html="text"></span><br>
        <img v-bind:src="pic0">
        <img :src="pic1">
        <img :src="pic2">
        <img :src="pic3">
        <img :src="pic4">
        <img :src="pic5">


    </div>

    <script>
        console.log(sina.statuses[0].pic_urls[0].thumbnail_pic);
        new Vue({
            el: "#box",
            data: {
                touxiang: sina.statuses[0].user.profile_image_url,
                name: sina.statuses[0].user.name,
                location: sina.statuses[0].user.location,
                date: sina.statuses[0].created_at,
                text: sina.statuses[0].text,
                pic0: sina.statuses[0].pic_urls[0].thumbnail_pic,
                pic1: sina.statuses[0].pic_urls[1].thumbnail_pic,
                pic2: sina.statuses[0].pic_urls[2].thumbnail_pic,
                pic3: sina.statuses[0].pic_urls[3].thumbnail_pic,
                pic4: sina.statuses[0].pic_urls[4].thumbnail_pic,
                pic5: sina.statuses[0].pic_urls[5].thumbnail_pic,
            }
        })
    </script>

image.png

样式绑定: 经常我们需要对样式进行切换,比如:div的显示和隐藏,某些标签active等。Vue提供的对象绑定样式的方式就很容做这些事情

:

<style>
    .active {
        color: red;
    }
</style>

<body>
    <!-- 样式绑定 -->
    <div id="box">
        <!-- isActive为true时属性存在 -->
        <div v-bind:class="{ active: isActive }">
            绑定颜色

        </div>

    </div>
    <script>
        new Vue({
            el: "#box",
            data: {
                isActive: true
            }
        })
    </script>
</body>

image.png

混合普通的HTML标签样式类及绑定样式对象:v-bind:class 指令可以与普通的 class 属性共存。

列::

<style>
    .active {
        color: skyblue;
    }

    /* .sn1 {
        color: red;
    } */
</style>

<body>
    <div id="box">
        <div class="sn1" v-bind:class="{ active: isActive }">
            属性绑定


        </div>
    </div>
    <script>
        new Vue({
            el: "#box",
            data: {
                isActive: true
            }
        })
    </script>
</body>

image.png

image.png