Vue指令学习笔记

此笔记是2020年11月16日开始学习Vue敲得笔记,由有道云笔记开始转移到CSDN。方便自己查看,随时回忆。

一.v-bind指令,是用来绑定属性的

a: 基本介绍

 

b. v-bind动态绑定 class

<!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>
    .active{
      border: red 3px solid;
    }
  </style>
</head>
<body>
<div id="app">
  <!-- 操作元素中的某个属性,可以使用 v-bind -->
  <img v-bind:src="imgSrc" alt="">

  <!-- 简写就是直接 : 就可以,当操作 clss 属性的时候,可以使用三元表达式 -->
  <!-- "isActive?'active'"    意思: 如果isActive为真,那么加active-->
  <img :src="imgSrc" alt="" :title="imgTitle" :class="isActive?'active':''" @click='changeClick'>

  <!-- 通过对象来操作 class,"{ active:isActive }"  如果 isActive为真,那么添加acitve ,如果某个class是确定不变的,那么可以写死,最后会自动合并-->
  <img :src="imgSrc" alt="" :title="imgTitle" class="title" :class="{ active:isActive }" @click='changeClick'>

  <!--数组语法 可以将class 放在数组中进行绑定,如果类名较多,可以绑定在 methods的函数中-->
  <img :src="imgSrc" alt="" class="active" :class="[sun, li]">
  <img :src="imgSrc" alt="" class="active" :class="getClasses()">


</div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
  var app = new Vue({
    el: "#app",
    data: {
      imgSrc: "https://tse1-mm.cn.bing.net/th/id/OIP.CUhQzmHXj3F-UhhFIdQoUgHaEx?pid=Api&rs=1",
      imgTitle: '小傻子',
      isActive: false,
      sun: 'aaa',
      li: 'bbb',
    },
    methods: {
      changeClick: function(){
        this.isActive = !this.isActive
      },
      // 数组动态绑定class对象
      getClasses: function(){
        return [this.sun, this.li]
      }
    }

  })
</script>
<!--
     v-bind总结:
    作用:为元素绑定属性
    完整写法: v-bind:属性名
    简写: 省略 v-bind 只保留   :属性名
    如果操作的是 class属性,那么更建议使用对象写法来操作
-->
</html>

c.动态绑定style属性

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  <div id="app">
<!--对象语法-->
<!--    <h2 :style="{key(属性名):value(属性值)}">{{message}}</h2>-->
    <h2 :style="{fontSize:size + 'px'}">{{message}}</h2>

<!--    数组语法, 本质上绑定的还是数组-->
    <h3 :style="[baseStyle]">{{message}}</h3>
  </div>
  <script src="../js/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        message: "你好!",
        size: 100,
        baseStyle: {backgroundColor: 'red'},
      }
    })
  </script>
</body>
</html>

二、Mustche语法(双大括号语法,最常用的语法)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  <div id="app">
    {{message}}
<!-- Mustache 语法:又称为双大括号。   -->
    <!-- 不仅可以直接写变量,还可以写简单的表达式-->
    <p>{{firstname + lastname}}</p>
    <p>{{firstname + " " + lastname}}</p>
    <p>{{firstname}} {{lastname}}</p>
    <p>{{ count * 2 }}</p>
  </div>
  <script src="../js/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        message: "你好!",
        firstname: '孙',
        lastname: '博',
        count: 100,
      }
    })
  </script>
</body>
</html>

三、v-once指令(元素只允许渲染一次)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  <div id="app">
    <h2>{{message}}</h2>
<!--    v-once 指令,可以使元素只渲染第一次的数据,不随着数据的变化而变化-->
    <h2 v-once>{{message}}</h2>
  </div>
  <script src="../js/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        message: "你好!1"
      }
    })
  </script>
<!--  
  v-once:
    该指令后面不需要跟任何表达式
    该指令表示元素和组件之渲染一次,不会随着数据的变化而变化
-->
</body>
</html>

四、v-pre指令(不对数据进行渲染,按照html标签内容原样渲染)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  <div id="app">
    <h2>{{message}}</h2>
<!-- 不进行解析,原样显示到浏览器   -->
    <h2 v-pre>{{message}}</h2>
  </div>
  <script src="../js/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        message: "你好!"
      }
    })
  </script>
</body>
</html>

五、v-cloak指令(js文件未能加载完毕,导致一些元素未经渲染显示在页面上,使用该指令可以防止出现,)

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    [v-cloak]{
      display: none;
    }
  </style>
</head>
<body>
<!-- v-cloak:当js文件因为某些原因未能顺利加载完毕,导致一些元素未经过渲染直接在页面上显示,
 不太友好,使用 v-cloak指令,可以让未经过渲染的元素不会在页面上显示。
 -->
  <div id="app" v-cloak>
    {{message}}
  </div>
  <script src="../js/vue.js"></script>
  <script>
    setTimeout(function(){
      const app = new Vue({
        el: '#app',
        data: {
          message: "你好!"
        }
      })
    }, 2000)
  </script>
</body>
</html>

六、v-model双向绑定(可以实现表单元素和绑定数据的同步修改)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>获取和设置表单元素的值(双向数据绑定)</title>
</head>
<body>
    <div id="app">
        <!-- 当我们通过点击事件,修改message的值的时候,此时表单元素的值也会同步更新 -->
        <input type="button" value="修改message" @click='setM'>

        <!-- 通过 v-model 可以获取到表单元素的值,也可以 -->
        <input type="text" v-model="message" @keyup.enter="getM">
        <!-- 当我们修改表单元素的值,此时绑定数据的值也会同步修改  -->
        <h3>{{ message }}</h3>
    </div>
</body>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el: "#app",
            data: {
                message: "小黑黑"
            },
            methods: {
                getM:function(){
                    alert(this.message)
                },
                setM:function(){
                    this.message="夏尔或"
                }
            }
        })
    </script>

    <!-- 
        v-model 总结:
        
        作用是: 便捷的设置和获取表单元素的值;
        绑定的数据会和表单元素值相关联
        绑定的数据 《---》 表单元素的值
        当我们去修改任何一个值的时候,另外一个值都会同步的更新,这就是双向绑定

        切记: 这是表单元素的值!!

     -->
</html>

七、v-on 事件绑定(点击事件之类的触发方法或者属性)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>v-on绑定事件</title>
</head>
<body>
    <div id="app">
        <input type="button" value="事件绑定" v-on:click='doIt'>
        <!-- <input type="button" value="事件绑定" v-on:monseenter='dolt'> -->
        <!-- <input type="button" value="事件绑定" v-on:dblclick='dolt'> -->
        <input type="button" value="事件简写" @click='doIt'>
        <!-- 
            标准写法: v-on 进行绑定事件
            简写: @
            当我们绑定事件的时候,通过 methods 来进行绑定,在 methods中定义方法,然后绑定方法名就可以
         -->
        <h2 @click='changeFood'>{{ food }}</h2>
    </div>
    
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app= new Vue({
            el: '#app',
            data: {
                food: '小鸡蛋'
            },
            methods: {
                doIt: function(){
                    alert('做的')
                },
                // 定义方法,html标签绑定事件,触发方法
                // 当我们想要获取某个标签中的数据的时候,可以通过 this.数据名  的方式来获取对应的数据,然后进行修改
                // 数据驱动型,不用关注 dom 元素,而只需要关注数据本身就可以。
                changeFood: function(){
                    this.food += '好吃呀!'
                }
            },
        })
    </script>
    <!-- 
        v-on 总结:
        作用: 为元素绑定事件
        时间名不需要写 on
        指令可以简写为 @
        绑定的方法定义在monthods属性中
     -->
</body>
</html>

v-on 自定义传参和事件修饰符
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>v-on补充:传递自定义参数,事件修饰符</title>
</head>
<body>
    <div id="app">
        <!-- 传递自定义参数,和python一样 -->
        <input type="button" value="点击" @click="doIt(666, 456)">

        <!-- 事件修饰符, 通过 . 语法来绑定触发事件 -->
        <input type="text" @keyup.enter= "sayHi('sss')">
    </div>
</body>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app =new Vue({
            el: "#app",
            methods: {
                doIt:function(p1, p2){
                    console.log('123');
                    console.log(p1, p2)
                },
                sayHi:function(p3){
                    alert(p3)
                }
            }
        })
    </script>
    <!-- 
        v-on 补充:

        事件绑定的方法携程 函数调用 的形式,可以传入自定义参数;
        定义方法时需要定义形参来接受传入的参数
        事件的后面跟上 .修饰符 可以对事件进行限制
        .enter 可以限制触发的按键为回车键
        事件修饰符有很多种
     -->
</html>

八、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="app">
        <button @click="add">添加</button>
        <button @click="remove">删除</button>
        <ul>
            <li v-for="(item, index) in arr">{{ index }}-{{ item }}</li>
        </ul>
          <-- 对象的话可以通过 .语法来获取其属性值 -->
        <h3 v-for="item in ver">
            {{ item.name }}
        </h3>
    </div>
</body>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                arr: [1, 2, 3, 4, 5, 6, 7],
                ver: [
                    {name: '茄子'},
                    {name: '鸡蛋'}
                ]
            },
            methods: {
                add:function(){
                    this.ver.push({ name: '黄瓜' })
                },
                remove:function(){
                    this.ver.shift()
                }
            }
        })
    </script>

    <!-- 
        v-for  总结:

        作用: 根据数据生成列表结构
        数组经常和 v-for结合使用
        语法是 (item, index) in 数据
        item 和 index 可以结合其他指令一起使用
        数组长度的更新会同步到页面上,是响应式的
        
     -->


</html>

九、v-text指令(结合data数据动态渲染,但是会覆盖元素内部的数据,一般直接会使用 双大括号语法)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Vue指令:v-text</title>
</head>
<body>
    <div id="app">
        <!-- 通过 v-text 指令,可以将 data数据赋值给对应的指令,但是会覆盖其内部所有的数据,设置的是行间属性 -->
        <!-- 默认写法 -->
        <h2 v-text='message'></h2>
        <!-- 字符串拼接,行间数据拼接 -->
        <h3 v-text="info + '!'"></h3>
        <!-- 差值表达式写法,可以单独赋值,不影响其他数据的渲染 , 也可以进行字符串拼接等等 -->
        <h4>{{ mes + '!!' }}<span>这里的内容不影响</span></h4>
    </div>
</body>
    <!-- 开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                message: '行间设置,全部覆盖',
                info: '字符串拼接',
                mes: '插值表达式'
            }
        })
        // v-text指令的总结:
        // 作用是 设置标签的内容 textContent
        // 默认写法会替换全部内容,使用差值表达式 {{}} 可以替换指定内容
        // 内部支持写表达式
    </script>
</html>

十、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="app">
        <!-- v-if 是操作的元素增删,应用于不常用的操作 -->
        <p v-if='isShow'>小黑黑</p>
        <!-- v-show 操作的是 display样式,常用的元素操作使用,性能影响较小 -->
        <p v-show='isShow'>小baibai</p>
        <button @click='changeIsShow'>切换</button>

        <!-- 可以使用逻辑表达式进行判断 -->
        <h2 v-if="temp>=35">好热</h2>
    </div>
</body>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el: '#app',
            data:{
                isShow: false,
                temp: 20,
            },
            methods: {
              changeIsShow:function(){
                  this.isShow = !this.isShow
              }  
            },
        })
    </script>
    <!-- 
        v-if 总结:
        1. 作用: 根据表达式的真假切换元素的显示状态
        2.本事是通过操纵 dom 元素来切换显示状态
        3. 表达式的值为true ,元素存在与dom树中,为 false 从dom树中移除
        4. 频繁切换状态的使用 v-show,反之使用 v-if, 前者的切换对性能影响较小
     -->
</html>

十一、v-show指令(通过控制器style的display来控制元素的显示状态,常用操作状态使用v-show)


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>v-show</title>
</head>
<body>
    <div id="app">
        <img src="./222.PNG" v-show='isFalse' alt="">
        <button @click='changeisShow'>点击切换</button>
    </div>
</body>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                isFalse: true,   // 如果是 false 那么元素就会隐藏

            },
            methods: {
                changeisShow: function(){
                   this.isFalse = !this.isFalse  // 取反 !来切换元素的真假
                }
            }
        })
    </script>

    <!-- 
        v-show 总结:
        1. 作用: 根据真假来切换元素的显示状态
        2. 原理就是通过修改元素的display状态来实现元素的隐藏
        3. 指令后面的内容,最后会被解析成 布尔值
        4. 值为 true 元素显示, 值为 false 元素隐藏
        5. 数据改变之后,对应元素的显示状态会同步更新
     -->

</html>

十二、v-html指令(动态解析data数据中的html文本,渲染到页面上)

<!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="app">
        <!-- v-text 只能解析成文本格式 -->
        <h3 v-text="content"></h3>
        <!-- v-html 可以将html文本解析成 html结构 -->
        <h4 v-html='content'></h4>
    </div>
</body>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                // content: '小黑黑'
                content: "<a href='#'>百度哈哈</a>"
            }
        })
    </script>
    <!-- 
        v-html指令总结:
        1.设置元素的 innerHtml
        2.内容中有html结构会被解析成标签
        3.v-text指令无论内容是什么,只会解析成文本
        4.解析文本使用 v-text,需要解析 html结构使用 v-html
     -->
</html>

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值