zoukankan      html  css  js  c++  java
  • vue系列2: vue指令总结

    1、v-cloak

    v-clock解决页面闪烁问题
    如果网速慢,而该标签内容是变量没有请求响应回来的时候,页面上先不显示该标签(vue给该标签加了css样式),当响应回来的时候改标签默认将css样式去除。此指令可以解决使用插值表达式页面闪烁问题
    将该指令加在html标签中时,可以在该文件中加style属性为display:none,例子如下:

    <style>
    [v-cloak] {
        display: none;
    }
    </style>
    <div class="#app" v-cloak>
        <p>{{name}}</p>
    </div>
    

    2、v-text

     <!-- v-text会覆盖元素中原本的内容,但是 插值表达式  只会替换自己的这个占位符,不会把 整个元素的内容清空 -->
    <body>
    <div  id="dv">
    	<p v-text="msg"></p>
            <p v-cloak>++++++++ {{ msg }} ----------</p>
    </div>
    <script>
    var vm=new Vue({
    	el:'dv',
    	data: {
    	msg: " 123 "
    	}
    })
    </script>
    

    3、v-html

    <body>
    <div id="dv">
    	<p v-html="msg"></p>
    </div>
    <script>
    var vm=new Vue({
    	el:'dv',
    	data: {
    	msg: " <h1>你知道我是一个放大字体的标签</h1> "
    	}
    })
    </script>
    </body>
    
    v-clock、v-text、v-html的区别
    不替换整个内容,只替换{{ msg }}占位符里面的内容
    v-clock能够解决插值表达式闪烁的问题
    v-text覆盖元素中原来的整个内容,没有闪烁问题
    v-html可以添加html标签
    

    4、v-bind

    <body>
    <!-- v-bind: 是 Vue中,提供的用于绑定属性的指令 -->
    <input type="button" value="按钮1" v-bind:title="mytitle + '123'"  v-on:click="show">
    <!-- 注意: v-bind: 指令可以被简写为 :要绑定的属性 -->
    <!-- v-bind 中,可以写合法的JS表达式 -->
    
    <script>
        var vm = new Vue({
          el: '#app',
          data: {
            msg: '123',
            msg2: '<h1>哈哈,我是一个大大的H1, 我大,我骄傲</h1>',
            mytitle: '这是一个自己定义的title'
          },
          methods: { // 这个 methods属性中定义了当前Vue实例所有可用的方法
            show: function () {
              alert('Hello')
            }
          }
        })
        /* document.getElementById('btn').onclick = function(){
          alert('Hello')
        } */
      </script>
    </body>
    

    5、v-on

    <!-- Vue 中提供了 v-on: 事件绑定机制 -->
    <script>
        var vm = new Vue({
          el: '#app',
          data: {
            msg: '123',
            msg2: '<h1>哈哈,我是一个大大的H1, 我大,我骄傲</h1>',
            mytitle: '这是一个自己定义的title'
          },
          methods: { // 这个 methods属性中定义了当前Vue实例所有可用的方法
            show: function () {
              alert('Hello')
            }
          }
        })
        /* document.getElementById('btn').onclick = function(){
          alert('Hello')
        } */
      </script>
    </body>
    

    事件修饰符

     <script>
        // 创建 Vue 实例,得到 ViewModel
        var vm = new Vue({
          el: '#app',
          data: {},
          methods: {
            div1Handler() {
              console.log('这是触发了 inner div 的点击事件')
            },
            btnHandler() {
              console.log('这是触发了 btn 按钮 的点击事件')
            },
            linkClick() {
              console.log('触发了连接的点击事件')
            },
            div2Handler() {
              console.log('这是触发了 outer div 的点击事件')
            }
          }
        });
      </script>
    
    5.1)使用 .stop 阻止冒泡
    <!-- 使用  .stop  阻止冒泡 -->
        <!--加了stop只有button点击事件会收到,不加stop-->
        <div class="inner" @click="div1Handler">
          <input type="button" value="戳他@click.stop,使用  .stop  阻止冒泡" @click.stop="btnHandler">
        </div>
    
    5.2)使用 .prevent 阻止默认行为
    <!-- 使用 .prevent 阻止默认行为 -->
        <a href="http://www.baidu.com" @click.prevent="linkClick">有问题,先去百度</a>
    
    5.3)使用 .capture 实现捕获触发事件的机制
    <!-- 使用  .capture 实现捕获触发事件的机制;从外往里执行,div1Handler-》  btnHandler -->
        <div class="inner" @click.capture="div1Handler">
          <input type="button" value="戳他" @click="btnHandler">
        </div>
    
    5.4)使用 .self 实现只有点击当前元素时候,才会触发事件处理函数
    <!-- 使用 .self 实现只有点击当前元素时候,才会触发事件处理函数 -->
        <div class="inner" @click="div1Handler">
          <input type="button" value="戳他" @click="btnHandler">
        </div>
    
    5.5)使用 .once 只触发一次事件处理函数
        <!-- 使用 .once 只触发一次事件处理函数 -->
        <a href="http://www.baidu.com" @click.prevent.once="linkClick">有问题,先去百度</a>
    
    5.6).self与.stop的区别
    <!-- 演示: .stop 和 .self 的区别 -->
        <div class="outer" @click="div2Handler">
          <div class="inner" @click="div1Handler">
            <input type="button" value="戳他 @click.stop" @click.stop="btnHandler">
          </div>
        </div>
    
        <!-- .self 只会阻止自己身上冒泡行为的触发,并不会真正阻止 冒泡的行为 -->
        <div class="outer" @click="div2Handler">
          <div class="inner" @click.self="div1Handler">
            <input type="button" value="戳他@click" @click="btnHandler">
          </div>
        </div>
    

    6、跑马灯

    <body>
      <!-- 2. 创建一个要控制的区域 -->
      <div id="app">
        <input type="button" value="浪起来" @click="lang">
        <input type="button" value="低调" @click="stop">
     <!--
     // 注意: VM实例,会监听自己身上 data 中所有数据的改变,只要数据一发生变化,就会自动把 最新的数据,从data 上同步到页面中去;【好处:程序员只需要关心数据,不需要考虑如何重新渲染DOM页面】
     -->
        <h4>{{ msg }}</h4>
      </div>
    
      <script>
        var vm = new Vue({
          el: '#app',
          data: {
            msg: '猥琐发育,别浪~~!',
            intervalId: null // 在data上定义 定时器Id
          },
          methods: {
            lang() {
              // console.log(this.msg)
              // 获取到头的第一个字符
              // this
              // 注意:在 VM实例中,如果想要获取 data 上的数据,或者 想要调用 methods 中的 方法,必须通过 this.数据属性名  或  this.方法名 来进行访问,这里的this,就表示 我们 new 出来的  VM 实例对象
              if (this.intervalId != null) return;
    
              this.intervalId = setInterval(() => {
                var start = this.msg.substring(0, 1)
                // 获取到 后面的所有字符
                var end = this.msg.substring(1)
                // 重新拼接得到新的字符串,并赋值给 this.msg
                this.msg = end + start
              }, 100)
            },
            stop() { // 停止定时器
              clearInterval(this.intervalId)
              // 每当清除了定时器之后,需要重新把 intervalId 置为 null
              this.intervalId = null;
            }
          }
        })
        // 分析:
        // 1. 给 【浪起来】 按钮,绑定一个点击事件   v-on   @
        // 2. 在按钮的事件处理函数中,写相关的业务逻辑代码:拿到 msg 字符串,然后 调用 字符串的 substring 来进行字符串的截取操作,把 第一个字符截取出来,放到最后一个位置即可;
        // 3. 为了实现点击下按钮,自动截取的功能,需要把 2 步骤中的代码,放到一个定时器中去;
      </script>
    </body>
    

    7、v-model

    <body>
      <div id="app">
        <h4>{{ msg }}</h4>
    
        <!-- v-bind 只能实现数据的单向绑定,从 M 自动绑定到 V, 无法实现数据的双向绑定  -->
        <!-- <input type="text" v-bind:value="msg" style="100%;"> -->
    
        <!-- 使用  v-model 指令,可以实现 表单元素和 Model 中数据的双向数据绑定 -->
        <!-- 注意: v-model 只能运用在 表单元素中 -->
        <!-- input(radio, text, address, email....)   select    checkbox   textarea   -->
        <input type="text" style="100%;" v-model="msg">
      </div>
    
      <script>
        // 创建 Vue 实例,得到 ViewModel
        var vm = new Vue({
          el: '#app',
          data: {
            msg: '大家都是好学生,爱敲代码,爱学习,爱思考,简直是完美,没瑕疵!'
          },
          methods: {
          }
        });
      </script>
    </body>
    

    8、简易计算器

    <body>
      <div id="app">
        <input type="text" v-model="n1">
    
        <select v-model="opt">
          <option value="+">+</option>
          <option value="-">-</option>
          <option value="*">*</option>
          <option value="/">/</option>
        </select>
    
        <input type="text" v-model="n2">
    
        <input type="button" value="=" @click="calc">
    
        <input type="text" v-model="result">
      </div>
    
      <script>
        // 创建 Vue 实例,得到 ViewModel
        var vm = new Vue({
          el: '#app',
          data: {
            n1: 0,
            n2: 0,
            result: 0,
            opt: '+'
          },
          methods: {
            calc() { // 计算器算数的方法  
              // 逻辑:
              /* switch (this.opt) {
                case '+':
                  this.result = parseInt(this.n1) + parseInt(this.n2)
                  break;
                case '-':
                  this.result = parseInt(this.n1) - parseInt(this.n2)
                  break;
                case '*':
                  this.result = parseInt(this.n1) * parseInt(this.n2)
                  break;
                case '/':
                  this.result = parseInt(this.n1) / parseInt(this.n2)
                  break;
              } */
    
              // 注意:这是投机取巧的方式,正式开发中,尽量少用
              var codeStr = 'parseInt(this.n1) ' + this.opt + ' parseInt(this.n2)'
              this.result = eval(codeStr)
            }
          }
        });
      </script>
    </body>
    

    9、v-for

    9.1)循环普通数组

    <body>
      <div id="app">
        <!-- <p>{{list[0]}}</p>
        <p>{{list[1]}}</p>
        <p>{{list[2]}}</p>
        <p>{{list[3]}}</p>
        <p>{{list[4]}}</p> -->
    
        <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>
    

    9.2)循环数组对象

    <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>
    

    9.3)循环对象

    <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>
    

    9.4)、迭代数字

    <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>
    

    9.5)循环中key属性使用

    <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>
    

    10、v-if v-show

    <body>
      <div id="app">
    
        <!-- <input type="button" value="toggle" @click="toggle"> -->
        <input type="button" value="toggle" @click="flag=!flag">
    
        <!-- 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>
        // 创建 Vue 实例,得到 ViewModel
        var vm = new Vue({
          el: '#app',
          data: {
            flag: false
          },
          methods: {
            /* toggle() {
              this.flag = !this.flag
            } */
          }
        });
      </script>
    </body>
    
  • 相关阅读:
    MongoDB Java连接---MongoDB基础用法(四)
    MongoDB用户,角色管理 --- MongoDB基础用法(三)
    Mongodb命令 --- MongoDB基础用法(二)
    MongoDB简介---MongoDB基础用法(一)
    Docker 私有仓库
    Dockerfile
    Docker部署Mysql, Tomcat, Nginx, Redis
    Docker 容器的数据卷
    封装的多功能多效果的RecyclerView
    安卓实现沉浸式效果,状态栏变色
  • 原文地址:https://www.cnblogs.com/xidianzxm/p/12168589.html
Copyright © 2011-2022 走看看