• vue指令与事件修饰符


    一.条件渲染指令

      vue中提供了两个指令可以用于判断是否要显示元素,分别是v-if和v-show。

      实例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script src="js/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <p v-if='is_login==true'>欢迎登陆</p>
            <p v-else><a href="">登录</a><a href="">注册</a></p>
            <!-- v-else不能单独使用,只能跟着v-if或者跟着v-else-if后面,表示或者的意思
            v-else会使用上一个v-if作为条件判断,并且v-else和v-if必须紧密相连 -->
    
    
                    <!-- 一次只会出现一个结果
            v-else-if可以有多个,但是和v-else一样,必须紧跟这v-if后面,不能单独使用 -->
            
            <p v-if='num%3==0'>这个数可以被3整除</p>
            <p v-else-if='num%5==0'>这个数可以被5整除</p>
            <p v-else-if='num%7==0'>这个数可以被7 整除</p>
            <p v-else>这个数比较特别</p>
    
    
    
            <!-- v-show只能单独使用,后面无法跟v-else -->
            <p v-show="num>10">num大于10</p>
            <p v-show="num<=10">num小于等于10</p>
        </div>
    
    
    
    
    
        <script>
            let vm=new Vue({
                el:'#app',
                data:{
                    is_login:false,
                    num:5
      
                },
    
    
            })
        
        
        </script>
        
    </body>
    </html>
    代码

    总结:

    1.  v-if 的特点:每次都会重新删除或创建元素 

    2.  v-show 的特点: 每次不会重新进行DOM的删除和创建操作,只是切换了元素的 display:none 样式 

    3. v-if 有较高的切换性能消耗 

    4. v-show 有较高的初始渲染消耗 

    5. 如果元素涉及到频繁的切换,最好不要使用 v-if, 而是推荐使用 v-show 

    6. 如果元素可能永远也不会被显示出来被用户看到,则推荐使用 v-if 

    7. v-if后面可以跟else,v-show后面不能跟else

    二.列表渲染指令(v-for)

      1.在vue中,可以通过v-for指令可以将一组数据渲染到页面中,数据可以是数组或者对象(python中的字典)。

      实例一:

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
      <script src="./lib/vue-2.4.0.js"></script>
    </head>
    
    <body>
      <div id="app">
        <p v-for="(item, i) in list">索引值:{{i}} --- 每一项:{{item}}</p>
      </div>
    
      <script>
        // 创建 Vue 实例,得到 ViewModel
        var vm = 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 name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
      <script src="./lib/vue-2.4.0.js"></script>
    </head>
    
    <body>
      <div id="app">
        <p v-for="(user, i) in list">Id:{{ user.id }} --- 名字:{{ user.name }} --- 索引:{{i}}</p>
      </div>
    
      <script>
        // 创建 Vue 实例,得到 ViewModel
        var vm = new Vue({
          el: '#app',
          data: {
            list: [
              { id: 1, name: 'zs1' },
              { id: 2, name: 'zs2' },
              { id: 3, name: 'zs3' },
              { id: 4, name: 'zs4' }
            ]
          },
          methods: {}
        });
      </script>
    </body>
    
    </html>
    对象

      实例三:

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
      <script src="./lib/vue-2.4.0.js"></script>
    </head>
    
    <body>
      <div id="app">
        <!-- 注意:在遍历对象身上的键值对的时候, 除了 有  val  key  ,在第三个位置还有 一个 索引  -->
        <p v-for="(val, key, i) in user">值是: {{ val }} --- 键是: {{key}} -- 索引: {{i}}</p>
      </div>
    
      <script>
        // 创建 Vue 实例,得到 ViewModel
        var vm = new Vue({
          el: '#app',
          data: {
            user: {
              id: 1,
              name: '托尼·屎大颗',
              gender: ''
            }
          },
          methods: {}
        });
      </script>
    </body>
    
    </html>
    带索引的对象

      实例四:循环数字从1开始,是一个闭区间

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
      <script src="./lib/vue-2.4.0.js"></script>
    </head>
    
    <body>
      <div id="app">
        <!-- in 后面我们放过  普通数组,对象数组,对象, 还可以放数字 -->
        <!-- 注意:如果使用 v-for 迭代数字的话,前面的 count 值从 1 开始,还是一个闭区间 -->
        <p v-for="count in 10">这是第 {{ count }} 次循环</p>
      </div>
    
      <script>
        // 创建 Vue 实例,得到 ViewModel
        var vm = new Vue({
          el: '#app',
          data: {},
          methods: {}
        });
      </script>
    </body>
    
    </html>    
    数字

      实例五:v-forkey的使用

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>Document</title>
      <script src="./lib/vue-2.4.0.js"></script>
    </head>
    
    <body>
      <div id="app">
    
        <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 在使用的时候,必须使用 v-bind 属性绑定的形式,指定 key 的值 -->
        <!-- 在组件中,使用v-for循环的时候,或者在一些特殊情况中,如果 v-for 有问题,必须 在使用 v-for 的同时,指定 唯一的 字符串/数字 类型 :key 值 -->
        <p v-for="item in list" :key="item.id">
          <input type="checkbox">{{item.id}} --- {{item.name}}
        </p>
      </div>
    
      <script>
        // 创建 Vue 实例,得到 ViewModel
        var vm = new Vue({
          el: '#app',
          data: {
            id: '',
            name: '',
            list: [
              { id: 1, name: '李斯' },
              { id: 2, name: '嬴政' },
              { id: 3, name: '赵高' },
              { id: 4, name: '韩非' },
              { id: 5, name: '荀子' }
            ]
          },
          methods: {
            add() { // 添加方法
              this.list.unshift({ id: this.id, name: this.name })
            }
          }
        });
      </script>
    </body>
    
    </html>
    key的使用

    三.事件修饰符

      .stop阻止事件冒泡

      .prevent阻止自身事件

      .self只有自身事件才会触发

      .capture:捕获事件

      实例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script src="js/vue.js"></script>
        <style>
            .inner{
                background: blue;
                height: 150px;
            }
        
            .outer{
                background:yellow;
                padding:40px; 
    
            }
        </style>
    </head>
    <body>
            <div id='app'>
                <!-- 使用了.stop 阻止冒泡--外层的事件不会被触发-->
                <!-- <div class='inner' @click='innerHandle'>
                    <input type="button" value='抽我' @click.stop='btnHandle'>
                </div> -->
    
                <!-- 使用了.prevent 阻止默认行为,连接就不会跳转 -->
                <!-- <a href="http://www.baidu.com" @click.prevent='link'>连接事件</a> -->
    
                <!-- 使用了.capture 实现捕获触发事件机制,从外到里执行,注意看这个修饰方法是法作用在外层的-->
                <!-- <div class='inner' @click.capture='innerHandle'>
                    <input type="button" value='抽我' @click='btnHandle'>
                </div> -->
    
                <!-- .self自由是自身点击才会执行,冒泡或者捕获到的都不会执行 -->
                <!-- <div class='inner' @click.self='innerHandle'>
                    <input type="button" value='抽我' @click='btnHandle'>
                </div> -->
    
                <!--只阻止一次,preven和once的位置没有关系 -->
                <!-- <a href="http://www.baidu.com" @click.prevent.once='link'>连接事件</a> -->
    
                <!-- .stop和.self的区别 -->
                <!-- .self自会阻止自身点击事件,并不会阻止冒泡行为,中间层被self拦截,外层的冒泡行为继续 -->
                <!-- stop除了自身,所有的冒泡行为继续 -->
                <div class="outer" @click='outer'>
                    <div class='inner' @click.self='innerHandle'>
                        <input type="button" value='抽我' @click='btnHandle'>
                    </div>
                </div>  
    
    
            </div>  
    
    
    
        <script>
            let vm=new Vue({
                el:'#app',
                data:{
    
    
                },
                methods: {
                    btnHandle:function() {
                        console.log('操你大爷')
                        
                    },
                    innerHandle:function(){
                        console.log('inner')
                    },
                    link:function(){
                        console.log('触发了连接事件')
                    },
                    outer:function(){
                        console.log('outer')
    
                    }
                    
                },
            })   
     
        </script>
    </body>
    </html>
    事件修饰
  • 相关阅读:
    解决方法 svn checkout 更改用户名密码/断网续传
    解决方法 cannot be resolved as a type
    解决方法 Syntax error on token "enum", invalid Expression
    使用笔记 Sublime text 持更
    解决方法 cvs或svn上下载的新项目无build path
    解决方法 卸载jdk以及重新安装jdk
    配置笔记 eclipse, jdk, tomcat, maven, mysql, alt+/
    ubantu配置java环境变量
    写给自己的!
    数据设计模式
  • 原文地址:https://www.cnblogs.com/tjp40922/p/10501867.html
Copyright © 2020-2023  润新知