【Vue简单指令】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录 

  1. v-cloak搭配{{}}使用
  2. v-text
  3. v-html
  4. v-pre
  5. v-bind
  6. v-model
  7. v-on
  8. v-for
  9. v-if
  10. v-show


前言

本着巩固Vue的一些内容,从基础开始做起,第一次发文;

本文介绍了Vue中一些简单指令和事件修饰符的使用

一、指令

1. v-cloak:在使用{{}}插值表达式的时候,我们如果网速过于加载缓慢,我们会看到页面中出现我们写的一些插值式子
如 ,

主要是由于没有将vue.js文件加载完毕,导致的数据还没有进行渲染 ,

这个时候我们可以使用 指令 v-cloak 来解决这个问题

需要配合我们的css来使用,在还没有加载完毕vue的时候,先将元素隐藏不可见,然后加载完毕了在显示出来.极好的解决闪烁的问题

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

 <!-- 使用v-cloak 能够解决 插值表达式闪烁的问题 -->
        <p v-cloak>{{msg}}</p>
        <h4 v-text="msg"></h4>



 const app = new Vue({
            el: '#app',
            data: {
                msg: '6666',
                msg2: '<h1>我是一个大大的H1,我大,我骄傲</h1>',
                mytitle: '这是一个自己定义的title'
            },
            methods: { // 这个 methods属性中定义了当前Vue实例中所有可用的方法
                show() {
                    console.log('啦啦啦');
                }
            }
        });

 当然,插值表达式{{}}也可以写一个合法的js表达式,这里就不一一赘述了,

2. v-text: 与原生的innerText类似

他相对于{{}}而言,不存在闪烁的问题, 但是会覆盖元素自带的一些内容,如文本,标签等,

而{{}} 就不会覆盖 只会加载自己那一块儿占位符的内容

<div id="app">

 <div v-text="msg2"></div>

</div>



const app = new Vue({
            // 挂载的元素
            el: '#app',
            // 挂载元素区域定义的数据
            data: {
                msg: '6666',
                msg2: '<h1>我是一个大大的H1,我大,我骄傲</h1>',
                mytitle: '这是一个自己定义的title'
            },
            methods: { // 这个 methods属性中定义了当前Vue实例中所有可用的方法
                show() {
                    console.log('啦啦啦');
                }
            }
        });

 

3. v-html: 不存在闪烁问题,可以识别普通文本,也可以识别标签文本,与原生的innerHTML类似

<div id="app">
<!-- 会识别为标签内容进行渲染 -->
 <div v-html="msg2"></div>

</div>



const app = new Vue({
            // 挂载的元素
            el: '#app',
            // 挂载元素区域定义的数据
            data: {
                msg: '6666',
                msg2: '<h1>我是一个大大的H1,我大,我骄傲</h1>',
                mytitle: '这是一个自己定义的title'
            },
            methods: { // 这个 methods属性中定义了当前Vue实例中所有可用的方法
                show() {
                    console.log('啦啦啦');
                }
            }
        });

 4. v-pre: 这个指令定义的内容,不会被进行编译,也就是说 里面就算是写了{{msg}}之类的,也只会当作普通的文本进行显示,因为根本不进行编译,适用于一些静态的内容

<div id="app">
<!-- 不会进行编译,适用于一些静态资源 -->
 <div v-pre="msg2"></div>

</div>



const app = new Vue({
            // 挂载的元素
            el: '#app',
            // 挂载元素区域定义的数据
            data: {
                msg: '6666',
                msg2: '<h1>我是一个大大的H1,我大,我骄傲</h1>',
                mytitle: '这是一个自己定义的title'
            },
            methods: { // 这个 methods属性中定义了当前Vue实例中所有可用的方法
                show() {
                    console.log('啦啦啦');
                }
            }
        });

5. v-bind: 绑定属性


        <!-- v-bind: 是Vue中, 提供的用于绑定属性的指令 -->

        <!-- <input type="button" name="" value="按钮" v-bind:title="mytitle + '666'"> -->
        <!-- 注意: v-bind: 指令可以简写为 : -->
        <!-- <input type="button" name="" value="按钮" :title="mytitle + '666'"> -->
        <!-- v-bind: 中, 可以写合法的js表达式 -->


 const app = new Vue({
            el: '#app',
            data: {
                msg: '6666',
                msg2: '<h1>我是一个大大的H1,我大,我骄傲</h1>',
                mytitle: '这是一个自己定义的title'
            },
            methods: { // 这个 methods属性中定义了当前Vue实例中所有可用的方法
                show() {
                    console.log('啦啦啦');
                }
            }
        });

6. v-model: 双向数据绑定,所谓数据双向绑定,就是

当我们的View(用户页面) 发生变化,我们的Model(数据)会进行更新,

当Model(数据)发生变化了,View(用户界面) 也会进行变化

只能在表单元素( input select text area ) 或者是 components(组件中进行使用)

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="app">
        <h4>{{msg}}</h4>

        <!-- v-bind: 只能实现数据的单项绑定, 从 M 自动绑定到 V , 无法实现数据的双向绑定-->
        <!-- <input type="text" v-bind:value="msg"> -->

        <!-- 使用 v-model 指令, 可以实现 表单元素和 Model 中数据的双向数据绑定 -->
        <!-- 注意: v-model 只能运用在表单元素中 -->
        <!-- input{radio, text, address, email ...} select  checkbox  textarea -->
        <input type="text" v-model="msg">
    </div>
    <script src="../js/vue.js"></script>
    <script>
        const app = new Vue({
            el: '#app',
            data: {
                msg: '大家都是好学生,爱敲代码,爱学习,爱思考,没瑕疵!'
            },
            methods: {

            }
        });
    </script>
</body>

</html>

7. v-on: Vue中提供了这个指令用来事件的绑定


        <!-- Vue中提供了 v-on: 事件绑定机制 -->
        <!-- <input type="button" name="" value="按钮" :title="mytitle + '666'" v-on:click=""> -->

        <!-- <input type="button" name="" value="按钮" v-on:mouseover="show"> -->
        <!-- v-on:事件名=""  可以简写为  @事件名="" -->







<script>
        const app = new Vue({
            el: '#app',
            data: {
                msg: '6666',
                msg2: '<h1>我是一个大大的H1,我大,我骄傲</h1>',
                mytitle: '这是一个自己定义的title'
            },
            methods: { // 这个 methods属性中定义了当前Vue实例中所有可用的方法
                show() {
                    console.log('啦啦啦');
                }
            }
        });
    </script>

 8. v-for 很类似数组的forEach 方法

可以对 普通数组, 对象数组, 对象, 数字(原生的普通for循环 注意: 这里是从1开始)

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="app">
        <p v-for="(item,index) in list">{{index}}-----{{item}}</p>
        <ul v-for="(item,index) in list">
            <li>{{index}}-----{{item}}</li>
        </ul>
    </div>
    <script src="../js/vue.js"></script>
    <script>
        // 创建Vue的实例, 得到 ViewModel
        const app = new Vue({
            el: '#app',
            data: {
                list: [1, 2, 3, 4, 5, 6]
            },
            methods: {}
        });
    </script>
</body>

</html>

对象数组

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="app">
        <p v-for="user in list">{{user.id}}-----{{user.name}}</p>

        <ul v-for="user in list">
            <li>{{user.id}}-----{{user.name}}</li>
        </ul>
    </div>

    <script src="../js/vue.js"></script>
    <script>
        // 创建Vue实例 , 得到 ViewModel
        const app = new Vue({
            el: '#app',
            data: {
                list: [{
                    id: 1,
                    name: 'yuni'
                }, {
                    id: 2,
                    name: 'yuni1111'
                }, {
                    id: 3,
                    name: 'yuni2222'
                }, {
                    id: 4,
                    name: 'yuni6666'
                }, {
                    id: 5,
                    name: 'yuni8888'
                }]
            }
        });
    </script>
</body>

</html>

对象

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="app">
        <!-- 注意: 在遍历对象身上的键值对的时候,除了有 val key, 在第三个位置还有 一个 索引  -->
        <p v-for="(val,key,index) in user">{{key}}---{{val}}---{{index}}</p>
    </div>

    <script src="../js/vue.js"></script>
    <script>
        // 创建Vue 实例, 得到 ViewModel
        const app = new Vue({
            el: "#app",
            data: {
                user: {
                    name: '遇你',
                    age: 18,
                    sex: '男',
                    Meet: 'MeetQin'
                }
            }
        });
    </script>
</body>

</html>

 迭代数字

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="app">
        <!-- in 后面可以放置 普通数组, 对象数组, 对象, 还可以放置数字 -->
        <!-- 注意: 如果使用 v-for 迭代数字的话, 前面的 count 值 从 1 开始 -->
        <p v-for="count in 20">这是第{{count}}个</p>
    </div>


    <script src="../js/vue.js"></script>
    <script>
        // 创建Vue实例, 得到ViewModel
        const app = new Vue({
            el: '#app',
            data: {}
        });
    </script>
</body>

</html>

key属性的使用

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="app">
        <!-- <p v-for="item in list">{{item.name}}</p>
        <ul v-for="item in list">
            <li>{{item.name}}</li>
        </ul> -->
        <div>
            <label>Id:
              <input type="text" v-model="id">
            </label>
            <label>Name:
              <input type="text" v-model="name">
            </label>
            <input type="button" value="添加" @click="add">
        </div>
        <!-- 注意: v-for 循环的时候, key 属性只能使用 number 或者 string
             避免我们在数组头部插入的时候,选中失效的问题, key作为一个标识
        -->
        <p v-for="item in list" :key="item.id">
            <input type="checkbox">{{item.id}} --- {{item.name}}
        </p>
    </div>

    <script src="../js/vue.js"></script>
    <script>
        // 创建Vue实例, 获取到 ViewModel
        const app = new Vue({
            el: '#app',
            data: {
                id: '',
                name: '',
                list: [{
                    id: 1,
                    name: '丽丝'
                }, {
                    id: 2,
                    name: '始皇帝'
                }, {
                    id: 3,
                    name: '🐂🐎'
                }, ]
            },
            methods: {
                add() {
                    this.list.unshift({
                        id: this.id,
                        name: this.name
                    });
                }
            }
        });
    </script>
</body>

</html>

9. v-if: 条件式渲染,为true 的时候,会创建元素显示, 为false的时候会进行销毁元素,

10. v-show: 为true 的时候显示元素,为false的时候,隐藏元素,使用display:none;的切换来渲染

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

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <div id="app">
        <input type="button" value="toggle" @click="toggle">

        <!-- v-if 的特点: 每次都会重新删除或创建元素 -->
        <!-- v-show 的特点: 每次不会重新进行DOM的删除和创建操作, 只是切换了元素的 display:none; 效果 -->

        <!-- v-if 有较高的切换性能消耗 -->
        <!-- v-show 有较高的初始渲染消耗 -->

        <!-- 如果元素涉及到频繁的切换,最好不要使用v-if, 而是推荐使用v-show -->
        <!-- 如果元素可能永远也不会被显示出来被用户看到,则推荐使用 v-if -->
        <h3 v-if="flag">这是v-if控制的元素</h3>
        <h3 v-show="flag">这是v-show控制的元素</h3>
    </div>



    <script src="../js/vue.js"></script>
    <script>
        // 创建Vue实例 获取到 ViewModel
        const app = new Vue({
            el: "#app",
            data: {
                flag: true
            },
            methods: {
                toggle() {
                    this.flag = !this.flag;
                }
            }
        });
    </script>
</body>

</html>

总结

主要是对一些指令的描述,由于第一次发文,感觉文字描述部分过多,但是我都是按照自己的理解来写的,会继续努力的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值