指令语法

指令

1.v-cloak

●用法:

这个指令保持在元素上直到关联实例结束编译。和 CSS 规则如 [v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Mustache 标签直到实例准备完毕。

不需要表达式

<!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="app">
        <p v-cloak>{{msg+1+1+1+1+1+1}}</p>
    </div>
    <script src="js/vue.js"></script>
    <script>
        let vm = new Vue({
            el: '#app',
            data: { 
                msg: 'hello world'
            }
        })
    </script>
</body>

</html>

不会显示,直到编译结束。


2.v-text

●详细:

更新元素的 textContent。如果要更新部分的 textContent,需要使用 {{ Mustache }} 插值。

预期:string

参考:数据绑定语法 - 插值

 <!-- 指令,标签的自定义属性 -->
    <div id="app">
        <!-- {{userName}} -->
        <p v-text='userName'></p>
    </div>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                userName: 'admin'
            }
        })
    </script>

3.v-html

●详细:

更新元素的 innerHTML。注意:内容按普通 HTML 插入 - 不会作为 Vue 模板进行编译。如果试图使用 v-html 组合模板,可以重新考虑是否通过使用组件来替代。

在网站上动态渲染任意 HTML 是非常危险的,因为容易导致 XSS 攻击。只在可信内容上使用 v-html,永不用在用户提交的内容上。

在单文件组件里,scoped 的样式不会应用在 v-html 内部,因为那部分 HTML 没有被 Vue 的模板编译器处理。如果你希望针对 v-html 的内容设置带作用域的 CSS,你可以替换为 CSS Modules 或用一个额外的全局

预期:string

<div id="app">
        <!-- {{myDiv}} -->
        <div v-html='myDiv'></div>
    </div>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                myDiv: '<h1>Hi</h1>'
            }
        })
    </script>

4.v-pre

●用法:

跳过这个元素和它的子元素的编译过程。可以用来显示原始 Mustache 标签。跳过大量没有指令的节点会加快编译。

不需要表达式

<div id="app">
        <p v-pre>{{msg}}</p>
    </div>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                msg: '不想被编译'
            }
        })
    </script>

5.v-once

●详细:

只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过。这可以用于优化更新性能。

不需要表达式

 <div id="app">
        <p v-once>{{msg}}</p>
    </div>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                msg: '最初的梦想,当宇航员'
            },
            mounted() {
                this.msg = '后来我成了火箭程序编写工程师'
            }
        })
    </script>

6.v-model

●用法:

在表单控件或者组件上创建双向绑定。

预期:随表单控件类型不同而不同。

<!-- 双向数据绑定 -->
    <div id="app">
       <input type="text" value="" v-model="userName">
       <p>{{userName}}</p>
    </div>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                userName: 'admin'
            }
        })
    </script>

7.v-on

缩写:@

●用法:
绑定事件监听器。事件类型由参数指定。表达式可以是一个方法的名字或一个内联语句,如果没有修饰符也可以省略。

用在普通元素上时,只能监听原生 DOM 事件。用在自定义元素组件上时,也可以监听子组件触发的自定义事件。

在监听原生 DOM 事件时,方法以事件为唯一的参数。如果使用内联语句,语句可以访问一个 $event property:v-on:click=“handle(‘ok’, $event)”。

预期:Function | Inline Statement | Object

参数:event

 <!-- 解放DOM -->
    <div id="app">
        <input type="text" v-model="num"><br/>
        <input type="button" value="+1" v-on:click='add'>
        <input type="button" value="-1" @click='sub'>
    </div>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                num: 1
            },
            //将num值进行操作
            //methods:用来写页面需要的方法的配置项
            methods: {
                    add: function () {
                            this.num += 1
                            //this.num = this.num+1
                    },
                    sub() {
                        this.num -= 1
                    }
            }
        })
    </script>

8.v-bind

缩写::

●用法:
动态地绑定一个或多个 attribute,或一个组件 prop 到表达式。

在绑定 class 或 style attribute 时,支持其它类型的值,如数组或对象。可以通过下面的教程链接查看详情。

在绑定 prop 时,prop 必须在子组件中声明。可以用修饰符指定不同的绑定类型。

没有参数时,可以绑定到一个包含键值对的对象。注意此时 class 和 style 绑定不支持数组和对象。

预期:any (with argument) | Object (without argument)

参数:attrOrProp (optional)

  <div id="app">
       <img v-bind:src="" >
    </div>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                srcUrl: './img/timg.jpg'
            },//这个逗号必须要
            mounted() {
                //这个this必须要:它只当前的vm实例
                this.srcUrl ='./img/timg2.jpg'
            }
        })
    </script>

9.if&show

●用法:
指令用于条件性地渲染一块内容。这块内容只会在指令的表达式返回 truthy 值的时候被渲染。

<div id="app">
        <button @click='changeShow'>显示图片</button>
        <!-- <div v-if="isShow"></div> -->
        <div v-if='isShow'>
            <!-- <img src="./img/timg.jpg"> -->
            请登录
        </div>
        <div>
            用户:aa已登录
        </div>
    </div>
        <script src="./js/vue.js"></script>
        <script>
            new Vue({
                el: '#app',
                data: {
                    isShow: true//布尔值
                },
                methods: {
                    changeShow() {
                        this.isShow = !this.isShow
                    }
                }
            })
        </script>

因为 v-if 是一个指令,所以必须将它添加到一个元素上。但是如果想切换多个元素呢?此时可以把一个 元素当做不可见的包裹元素,并在上面使用 v-if。最终的渲染结果将不包含 元素。

<template v-if="ok">
  <h1>Title</h1>
  <p>Paragraph 1</p>
  <p>Paragraph 2</p>
</template>

10.事件修饰符

 <div id="app"> 
        <a href="https://www.baidu.com/" @click.prevent='myAlert'>点击</a>

        <!-- 冒泡 -->
        <div @click='divC1'>
                <button @click.stop='btnC1'>点击</button>
        </div>

        <!-- 按键的修饰符 -->
        <input type="text" v-model='nickName' @keyup='clearTxt'>
        <!-- 点亮backspace 直接清空 -->
    </div>
    <script src="./js/vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                    nickName: '字符字符字符字符字符字符字符字符'
            },
            methods: {
                myAlert(e) {
                    //阻止默认行为
                    //e.preventDefault();传统
                    //只专注于自己的操作
                    alert('被点亮了')
                },
                divC1() {
                    console.log('div');
                },
                btnC1() {
                    console.log('btn');
                },
                clearTxt() {
                    //清空表单
                    this.nickName = ''
                }
            }
        })
    </script>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值