zoukankan      html  css  js  c++  java
  • 【Vue】Re02 指令:第一部分

    一、v-once指令

    用于固定一次性赋值,后续Vue实例的赋值更改将不再对v-once指令的元素有效

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <!-- 列表显示 -->
    <div id="vue-application">
        <h3>Vue v-once指令</h3>
        <p>没有加入v-once属性,可以随意更改 -> {{variable}} </p>
        <p v-once>加入了v-once属性,不可以随意更改 -> {{variable}} </p>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script type="text/javascript">
        let v = new Vue({
            el : '#vue-application',
            data : {
                variable : '这是测试v-once的变量'
            }
        });
    </script>
    
    </body>
    </html>

    二、v-html指令

    用于将属性数据中的文本字符可以被浏览器解析到HTML代码

    说简单点,可以被转义

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <div id="vue-application">
        <h3>Vue v-html指令</h3>
        <p>没有加入v-html指令,不会被浏览器解析 -> {{variable}} </p>
        <p >加入了v-html指令,会被浏览器解析 -> <span v-html="variable"></span> </p>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script type="text/javascript">
        let v = new Vue({
            el : '#vue-application',
            data : {
                variable : '<h2>这是测试v-once的变量</h2>'
            }
        });
    </script>
    
    </body>
    </html>

    三、v-text指令

    仅用于输出显示纯文本内容,HTML代码将不会被转义处理

    一般怎么使用,因为我们还希望动态的来处理,而v-text只能一次性处理

    所以一般采取mustache语法结合其他固定文本使用

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <div id="vue-application">
        <h3>Vue v-html指令</h3>
        <p>原始mustache语法等同于v-text -> {{variable}} </p>
        <p>加入了v-text指令,不会会被浏览器解析 -> <span v-text="variable"></span> </p>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script type="text/javascript">
        let v = new Vue({
            el : '#vue-application',
            data : {
                variable : '<h2>这是测试v-once的变量</h2>'
            }
        });
    </script>
    
    </body>
    </html>

    四、v-pre指令

    用于越过mustache语法不注入属性数据,仅显示元素原本的文本内容

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="./../dependencies/vue-min.js"></script>
    </head>
    <body>
    <!-- 跳过该元素和子元素的Vue编译 -->
    <div id="vue-application">
        <h3>Vue v-html指令</h3>
        <p>无pre编译渲染 {{varA}}<span>{{varB}}</span></p>
        <p v-pre >有pre编译渲染 {{varA}}<span>{{varB}}</span></p>
    </div>
    
    <script type="text/javascript">
        let v = new Vue({
            el : '#vue-application',
            data : {
                varA : '变量A',
                varB : '变量B',
            }
        });
    </script>
    
    </body>
    </html>

    五、v-cloak指令

    cloak意思斗篷,遮挡之意,在Vue应用中是

    解决浏览器响应过慢,vue来不及渲染出现mustache的标记【插值闪烁的问题】

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script src="./../dependencies/vue-min.js"></script>
        <style type="text/css"> /*  解决浏览器响应过慢,vue来不及渲染出现mustache的标记  */
            [v-cloak] {
                display: none;
            }
        </style>
    </head>
    <body>
    
    </body>
    </html>

    六、v-bind指令

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <div id="vue-app">
        <h3>动态v-bind测试</h3>
        <p> <a v-bind:href="newLink">v-bind 链接测试</a> </p>
        <p> <a :href="newLink">v-bind 链接缩写语法测试</a> </p>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script type="text/javascript">
        let vm = new Vue({
            el : '#vue-app',
            data : {
                newLink : 'https://www.baidu.com'
            },
            filters : {
                customFilter(v) {
                    if ( 10 <= v && v <= 100) {
                        return '非法的值'
                    }
                    return v;
                }
            }
        });
    </script>
    
    </body>
    </html>

    动态绑定class属性

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
            .act {
                color: red;
            }
            .line {
                font-size: 50px;
            }
        </style>
    </head>
    <body>
    <div id="app">
        <p :class="sss">DynamicBinding1</p>
        <!--
            v-bind 动态绑定的方式 <tag :class="{ 类名1 : boolean, 类名2 : boolean }">文本值</tag>
        -->
        <p :class="{act : true, line : false}">DynamicBinding2</p>
    
        <!-- 利用data选项属性可以进行动态渲染 -->
        <p :class="{act : activateAct, line : activateLine}">DynamicBinding3</p>
    
        <!-- 还可以将已有的class属性进行合并处理 -->
        <p class="aaa" :class="{act : activateAct, line : activateLine}">DynamicBinding4</p>
    
        <!--
            如果太长不便于阅读,可以使用函数进行设置
            要注意assignmentCssClass是需要添加括号表示一个函数,且无参注入
        -->
        <p class="aaa" :class="assignmentCssClass()">DynamicBinding5</p>
    
        <!-- 使用数组语法进行渲染处理 -->
        <p class="aaa" :class="assignmentCssClassByList()">DynamicBinding6</p>
    
        <!-- 使用数组语法进行渲染处理,结合methods赋值 -->
    
        <p> <button @click="changeCssClass">点击取消样式绑定</button></p>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script type="text/javascript">
        const vm = new Vue({
            el : '#app',
            data : {
                sss : 'act',
    
                // 用于设置h3标签的class属性,act和line的布尔属性
                activateAct: true,
                activateLine : true
            },
            methods : {
                changeCssClass : function () {
                    this.activateAct = !this.activateAct;
                    this.activateLine = !this.activateLine;
                },
                assignmentCssClass : function () {
                    return { // 交给函数进行赋值处理
                        act : this.activateAct,
                        line : this.activateLine
                    }
                },
                assignmentCssClassByList : function () {
                    return [
                        'bbb',
                        'ccc',
                        'ddd',
                        'eee',
                        this.activateAct,
                        this.activateLine
                    ]
                }
            }
    
        });
    </script>
    
    </body>
    </html>

    动态绑定css样式:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    <div id="app">
        <!-- v-bind 动态绑定css语法 <tag :style="{ 样式名称 : 值  }" ></tag>  -->
        <h3 :style="{ fontSize : '28px', color : 'red' }">{{message}}</h3>
    
        <!-- 动态化 -->
        <h3 :style="{ fontSize : pixel }">{{message}}</h3>
    
        <!-- 或者是经过拼接处理 -->
        <h3 :style="{ fontSize : pixelNum + 'px' }">{{message}}</h3>
    
        <!-- 使用数组结合对象进行处理 -->
        <h3 :style="[styleObj01, styleObj02]">{{message}}</h3>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script type="text/javascript">
        const vm = new Vue({
            el : '#app',
            data : {
                message : 'dynamic-css',
                pixel : '20px',
                pixelNum : 100,
    
                styleObj01 : {
                    background : 'yellow',
                    color : 'green'
                },
                styleObj02 : {
                    fontSize : '28px',
                }
            }
        });
    </script>
    
    </body>
    </html>

    结合v-for指令结合的案例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style type="text/css">
            .color {
                color : red;
            }
        </style>
    </head>
    <body>
    
    <div id="app">
        <!-- 实现点击任意一个列表项进行样式更改-->
        <ul>
            <li v-for="(item, index) in list" :class="{color : current == index}" @click="changeColor(index)">{{index}} {{item}}</li>
        </ul>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script type="text/javascript">
        const vm = new Vue({
            el : '#app',
            data : {
                current : -1, // 默认位置为0,所以不能取值0而是-1
                list : [
                    '列表项1',
                    '列表项2',
                    '列表项3',
                    '列表项4',
                    '列表项5',
                ],
            },
            methods : {
                changeColor : function (i) {
                    this.current = i;
                }
            }
        });
    </script>
    
    </body>
    </html>
  • 相关阅读:
    退休夫妇不顾反对坚持创业,把自己的品牌推向了市场
    年终将至,财务人如何做好数据分析?
    圣诞快乐:Oracle Database 19c 的10大新特性一览
    perl 获取表记录数
    rex 防止调度还没完成后又继续发起
    希腊女孩创办自媒体教希腊语,如今用户已达1000人
    在20天里赚三千多元,他靠创意经营商店,扩大了店面
    小杂货店的崛起,他坚信创新和拼搏是成功的两大法宝
    thinkphp
    thinkphp
  • 原文地址:https://www.cnblogs.com/mindzone/p/13877119.html
Copyright © 2011-2022 走看看