Vue的相关指令

v-model

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="box">
        <h1>v-model指令主要是用于表单上数据的双向绑定</h1>
        <h2>
            v-model可以完成双向绑定模型和视图 模型变了--->视图就会自动发生改变 
            视图变了--->模型也会自动发生改变
            </h1>
            <input type="text" v-model="text">
            <h1>{{text}}</h1>
            <h1>{{text}}</h1>
            <h1>{{text}}</h1>
            <h1>{{text}}</h1>
    </div>
</body>

</html>
<script src="node_modules/vue/dist/vue.js"></script>
<script>
    new Vue({
        el: "#box",
        data: {
            text: "你好么么哒",
        }
    })
</script>

双向绑定原理:

1.数据劫持:当我们访问或设置对象的属性的时候,都会触发**Object.defineProperty()**函数来拦截(劫持),然后在返回(get)或设置(set)对象的属性的值。并且当数据发生改变的时候做出反应。

发布者-订阅者模式:其定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。

v-show

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="box">
        <h1>v-show指令</h1>
        <!-- v-show指令
      作用:控制切换一个元素的显示和隐藏
      语法:v-show = 表达式
      根据表达式结果的真假,确定是否显示当前元素
      true表示显示该元素,false(默认)表示隐藏该元素
      元素一直存在只是被动态设置了display:none -->


        <h1 v-show="bool">我是测试显示和隐藏的</h1>
        <hr>
        <h1>小练习,我有一个复选框,勾选的时候下面的内容显示,取消勾选下面的内容隐藏</h1>
        <input type="checkbox" v-model="ck">{{ck?'勾选了':"取消了"}}
        <h1 v-show="ck">小练习占位的</h1>

    </div>
</body>

</html>
<script src="node_modules/vue/dist/vue.js"></script>
<script>
    new Vue({
        el: "#box",
        data: {
            bool: true,
            ck: true //(0和-0都为false)
        }
    })
</script>

v-on

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="box">
        <h1>v-on指令</h1>
        <!-- 作用:为HTML元素绑定事件监听
        语法:v-on:事件名称="函数名称()"
        简写语法:@事件名称="函数名称()"
        注:函数定义在 methods 配置项中 -->

        <button v-on:click="fun1()">点我弹出弹出框哦</button>
        <button @click="fun2()">我是简写的</button>
    </div>
</body>

</html>
<script src="node_modules/vue/dist/vue.js"></script>
<script>
    new Vue({
        el: "#box",
        data: {

        },
        //函数要写在与 el data同级的位置使用methods来设置
        methods: {
            fun1() {
                alert("我是第一个按钮")
            },
            fun2() {
                alert("我是第2个按钮")
            }
        }
    })
</script>

v-for

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="box">
        <h1>v-for指令</h1>
        <!-- 作用:遍历 data 中的数据,并在页面进行数据展示 
        语法:v-for = "(item, index) in arr" item 表示每次遍历得到的元素 
        index 表示item的索引(下标),可选参数 -->
        <ul>
            <li v-for="(v,i) in arr">
                {{v}}------{{i}}
            </li>
        </ul>
        <hr>
        <table border="1" cellspacing="0" cellpadding="0">
            <tr v-for="(v,i) in obj">
                <td>{{v.name}}</td>
                <td>{{v.age}}</td>
            </tr>
        </table>
    </div>
</body>

</html>
<script src="node_modules/vue/dist/vue.js"></script>
<script>
    new Vue({
        el: "#box",
        data: {
            arr: ["EZ", "MF", "NOC", "VN"],
            obj: [{
                name: "xixi1",
                age: 30
            }, {
                name: "xiaoming",
                age: 20
            }, {
                name: "bingbing",
                age: 10
            }, {
                name: "xiaowang",
                age: 15
            }, {
                name: "xiaohong",
                age: 25
            }, {
                name: "xiaohua",
                age: 30
            }, ]
        }
    })
</script>

v-bind

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="box">
        <h1>v-bind指令</h1>
        <!-- 作用: 绑定 HTML 元素的属性 
            给html标签的属性插入变量
        语法: v-bind:属性名 = "表达式" 
        简写: 属性名="表达式" 
        绑定一个属性:
        <img v-bind:src="myUrl" /> 
        绑定多个属性(不能使用简写):
        <img v-bind="{src:myUrl, title: msg}" /> -->

        <a v-bind:href="ahref">{{atext}}</a>
        <a :href="ahref">66666{{atext}}</a>
    </div>
</body>

</html>
<script src="node_modules/vue/dist/vue.js"></script>
<script>
    new Vue({
        el: "#box",
        data: {
            ahref: "http://www.baidu.com",
            atext: "点我去百度"
        }
    })
</script>

v-if全家桶

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="box">
        <h1>v-if指令</h1>
        <!-- 作用:判断是否加载固定的内容
        语法:v-if = "表达式"
        根据表达式结果的真假,确定是否显示当前元素
        true表示加载该元素,false表示不加载该元素
        元素的显示和隐藏是对Dom元素进行添加和删除 -->
        <input type="checkbox" v-model="bool">

        <!-- v-show与v-if区别:
        v-if有更高的切换消耗(安全性高)
        v-show有更高的初始化的渲染消耗(对安全性无要求选择) -->
        <p v-show="bool">我是用v-show的例子</p>
        <p v-if="bool">我是用v-if的例子</p>
    </div>
</body>

</html>
<script src="node_modules/vue/dist/vue.js"></script>
<script>
    new Vue({
        el: "#box",
        data: {
            bool: true
        }
    })
</script>

v-else

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="box">
        <h1>v-else指令</h1>
        <!-- 坑1:v-else必须配合v-if使用
      坑2:v-if与v-else之间不能有多余的内容 -->
        <p v-if="bool">请登录</p>
        <!-- <h1>你好么么哒</h1> -->
        <p v-else>欢迎您</p>
    </div>
</body>

</html>
<script src="node_modules/vue/dist/vue.js"></script>
<script>
    new Vue({
        el: "#box",
        data: {
            bool: false
        }
    })
</script>

v-else-if

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="box">
        <h1>v-else-if指令</h1>
        <!-- 作用:当有一项成立是执行 -->
        <select v-model="text">
            <!-- 下拉框的option里面的value作用就是:把选中的value发给后台
            <input type="text"name="给后台发送数据的名字" value="给后台发送的值"> -->
            <option value="吃饭饭">吃饭饭</option>
            <option value="喝水水">喝水水</option>
            <option value="睡觉觉">睡觉觉</option>
            <option value="打豆豆">打豆豆</option>
        </select>

        <h1 v-if="text=='吃饭饭'">您选择了吃饭饭</h1>
        <h1 v-else-if="text=='喝水水'">您选择了喝水水</h1>
        <h1 v-else-if="text=='睡觉觉'">您选择了睡觉觉</h1>
        <h1 v-else-if="text=='打豆豆'">您选择了打豆豆</h1>
        <h1 v-else>您啥都没选择</h1 tml>
    </div>
</body>

</html>
<script src="node_modules/vue/dist/vue.js"></script>
<script>
    new Vue({
        el: "#box",
        data: {
            text: ""
        }
    })
</script>

v-text

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 解决屏幕闪动 */
        
        [v-cloak] {
            display: none;
        }
    </style>
</head>

<body>
    <div id="box" v-cloak>
        <h1>v-text指令向网页中插入文本内容</h1>
        <!-- 作用:操作网页元素中的纯文本内容,{{}}是它的另一种写法 -->

        <!--2、 v-text与{{}}区别:
        v-text与{{}}的等价,{{}}叫做模板插值,v-text叫指令,有一点区别就是在渲染的数据比较多的时候,可能会把大括号显示出来,俗称屏幕闪动 -->
        <!--2、 解决屏幕闪动的方式:
        (1)使用v-text渲染数据(不建议使用这个方法)
        (2)使用{{}}语法渲染数据,但是同时使用v-cloak指令(用来保持在元素上直到关联实例结束时候进行编译),v-cloak并不需要添加到每个标签,只要在el挂载的标签上添加就可以了 -->

        <h1 v-text="text"></h1>
        <h1>{{text}}</h1>

    </div>
</body>

</html>
<script src="node_modules/vue/dist/vue.js"></script>
<script>
    new Vue({
        el: "#box",
        data: {
            text: "么么哒"
        }
    })
</script>

v-heml与v-once

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        /* 解决屏幕闪动 */
        
        [v-cloak] {
            display: none;
        }
    </style>
</head>

<body>
    <div id="box" v-cloak>
        <!-- <h1>v-html指令</h1>
        作用:双大括号会将数据解释为纯文本,而非HTML,为了输出真正的HTML则需要使用v-html指令
        语法:<p v-html="text"></p>
        在工作的时候数据都是由后台返回前台 -->

        {{html}}
        <h1 v-html="html"></h1>

        <hr>

        <h1>v-once指令 一次性插值</h1>
        <!-- 作用:当数据改变是,插值处的内容不会更新(会影响到该节点上的所有属性) 
        语法:<p v-once>{{text}}</p> -->

        <input type="text" v-model="text">
        <h1>{{text}}</h1>
        <h1 v-once>{{text}}</h1>
        <h1>{{text}}</h1>
    </div>
</body>

</html>
<script src="node_modules/vue/dist/vue.js"></script>
<script>
    new Vue({
        el: "#box",
        data: {
            html: "<h1>超级无敌大帅锅</h1>",
            text: "我是默认值哦"
        }
    })
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值