当前位置: 首页>移动开发>正文

vue指令:v-html、v-show、v-if、v-else、v-on、事件对象

1.1 vue指令

  1. 什么是 Vue 指令呢?
    指令就是带有 v- 前缀的特殊标签属性,不同属性对应不同的功能
    学习不同指令 → 解决不同业务场景需求

1.2 如果需要动态解析标签,可以用哪个指令?语法?

v-html:
作用:设置元素的 innerHTML
语法:v-html = "表达式 "

<body>
    <div id="app">
        <p >{{str}}</p>
        <p v-html="str">这里的内容会被覆盖</p>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
    <script>
        const app =new Vue({
            el:'#app',
            data: {
                str:'xxxx<strong>xxxxx</strong>xxxxxxxxxx'
            }
        })
    </script>
</body>

1.3 条件渲染指令

  1. v-show
    1. 作用: 控制元素显示隐藏
    2. 语法: v-show = "表达式" 表达式值为 true 显示, false 隐藏
    3. 原理: 切换 display:none 控制显示隐藏
    4. 场景:频繁切换显示隐藏的场景
  2. v-if
    1. 作用: 控制元素显示隐藏(条件渲染)
    2. 语法: v-if= "表达式" 表达式值 true显示, false 隐藏
    3. 原理: 基于条件判断,是否创建 或 移除元素节点
    4. 场景: 要么显示,要么隐藏,不频繁切换的场景
     <div id="app">
       <div v-show="flag" class="box">我是v-show控制的盒子</div>
       <div v-if="flag" class="box">我是v-if控制的盒子</div>
     </div>

     <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
     <script>
       const app = new Vue({
         el: '#app',
         data: {
           flag: false
         }
       })
     </script>

1.4 条件渲染指令 v-else v-else-if

  1. 作用:辅助v-if进行判断渲染
  2. 语法:v-else v-else-if="表达式"
  3. 需要紧接着v-if使用
  <div id="app">
    <p v-if="gender === 1">性别:♂ 男</p>
    <p v-else>性别:♀ 女</p>
    <hr>
    <p v-if="score >= 90">成绩评定A:奖励电脑一台</p>
    <p v-else-if="score >= 70">成绩评定B:奖励周末郊游</p>
    <p v-else-if="score >= 60">成绩评定C:奖励零食礼包</p>
    <p v-else>成绩评定D:惩罚一周不能玩手机</p>
  </div>
  
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>

    const app = new Vue({
      el: '#app',
      data: {
        gender: 2,
        score: 95
      }
    })
  </script>

1.5 Vue 指令 v-on

  1. 作用: 注册事件 = 添加监听 + 提供处理逻辑
  2. 语法:
    ① v-on:事件名 = "内联语句"
    ② v-on:事件名 = "methods中的函数名"
  3. 简写:@事件名

1.5.1 内联语句

<div id="app">
    <button @click="count--">-</button>
    <span>{{ count }}</span>
    <button v-on:click="count++">+</button>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        count: 100
      }
    })
  </script>

1.5.2 methods中的函数名

注意:methods函数内的 this 指向 Vue 实例

<div id="app">
    <button @click="fn">切换显示隐藏</button>
    <h1 v-show="isShow">xxxxxxxxx</h1>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        isShow: true
      },
      methods: {
        fn () {
          // 让提供的所有methods中的函数,this都指向当前实例app
          // this永远表示Vue实例对象
          this.isShow = !this.isShow
        }
      }
    })
  </script>

给事件处理函数传参:
如果不传递任何参数,则方法无需加小括号;

<div id="app">
    <div class="box">
      <h3>小黑自动售货机</h3>
      <button @click="buy(5)">可乐5元</button>
      <button @click="buy(10)">咖啡10元</button>
      <button @click="buy(8)">牛奶8元</button>
    </div>
    <p>银行卡余额:{{ money }}元</p>
  </div>

  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        money: 100
      },
      methods: {
        buy (price) {
          this.money -= price
        }
      }
    })
  </script>

1.6 指令-事件对象

<body>
    <div id="app">
       
        <h2>需求:输入框输入内容,将内容显示在p标签中</h2>
         <!-- ① 如果在模板中(div页面中)使用事件対象,可以使用$event(固定写法) -->
        <!-- <input type="text" @input="result = $event.target.value">  -->
        <!-- <input type="text" @input="fn">  -->
        <!-- ③ 如果JS中,既用e,又有其他参数。原则一个实参对应形参 -->
        <input type="text" @input="fn($event, 100, 200)"> 
        <p>{{ result }}</p>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
    <script>
        const app =new Vue({
            el:'#app',
            data: {
                result:''
            },
            methods: {
                // <!-- ② 如果在JS中使用事件对象,还是事件处理函数的形参 e -->
                fn(e,a,b) {
                    this.result = e.target.value
                }
            }
        })
    </script>
</body>

https://www.xamrdz.com/mobile/48u1997566.html

相关文章: