Vue中常用的指令(入门)

Vue指令是什么?

指令(Directives)是 Vue 提供的带有 v- 前缀 的 特殊 标签属性
使用指令,可极大提高程序员操作DOM的效率。

vue 中的指令按照不同的用途可以分为如下 6 大类:

  • 内容渲染指令(v-htmlv-text
  • 条件渲染指令(v-showv-ifv-elsev-else-if
  • 事件绑定指令(v-on
  • 属性绑定指令 (v-bind
  • 双向绑定指令(v-model
  • 列表渲染指令(v-for

指令是 vue 开发中最基础、最常用、最简单的知识点。

内容渲染指令

内容渲染指令用来辅助开发者渲染 DOM 元素的文本内容。

  • v-text(类似innerText)

    • 使用语法:<p v-text="uname">hello</p>,意思是将 uame 值渲染到 p 标签中
    • 类似 innerText,使用该语法,会覆盖 p 标签原有内容
  • v-html(类似 innerHTML)

    • 使用语法:<p v-html="intro">hello</p>,意思是将 intro 值渲染到 p 标签中
    • 类似 innerHTML,使用该语法,会覆盖 p 标签原有内容
    • 类似 innerHTML,使用该语法,能够将HTML标签的样式呈现出来。

案例

<body>
    <div id="app">
        <p>{{ username }} 111 </p>
        <!-- v-text 把内容渲染在元素内部,相当于原生js的innerText -->
        <p v-text="username"> 111 </p>
        <div v-text="htmlStr"> 111 </div>
        <!-- v-html 把内容渲染在元素内部,相当于原生js的innerHTML -->
        <div v-html="htmlStr"> 111 </div>
        
	<script src="./vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                username: '张三',
                htmlStr: '<p>我是一段文字</p>'
            }
        })
    </script>
</body>

条件渲染指令

条件判断指令,用来辅助开发者按需控制 DOM 的显示与隐藏。

  1. v-show
    • 作用: 控制元素显示隐藏
    • 语法: v-show = “表达式” 表达式值为 true 显示, false 隐藏
    • 原理: 切换 display:none 控制显示隐藏
    • 场景:频繁切换显示隐藏的场景

在这里插入图片描述

  1. v-if
    • 作用: 控制元素显示隐藏(条件渲染)
    • 语法: v-if= “表达式” 表达式值 true显示, false 隐藏
    • 原理: 基于条件判断,是否创建 或 移除元素节点
    • 场景: 要么显示,要么隐藏,不频繁切换的场景

在这里插入图片描述
示例

<body>
  <div id="app">
    <div class="box">我是v-show控制的盒子</div>
    <div 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>
</body>
  1. v-else 和 v-else-if
    • 作用:辅助v-if进行判断渲染
    • 语法:v-else v-else-if=“表达式”
    • 需要紧接着v-if使用

示例:

<body>
    <div id="app">
        <!-- v-if 条件渲染 值为true显示元素 false隐藏元素 -->
        <div v-if="isLoading">loading...</div>
        <div v-else="isLoading">unloading...</div>
        <div v-if="score>=90"> A</div>
        <div v-else-if="score>=80">B</div>
        <div v-else="score<80">C</div>
    <script src="./vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                isLoading: true,
                score: 80
            }
        })
    </script>
</body>   

事件绑定指令

使用Vue时,如需为DOM注册事件,及其的简单,语法如下:
语法

  • <button v-on:事件名="内联语句">按钮</button>
  • <button v-on:事件名="处理函数">按钮</button>
  • <button v-on:事件名="处理函数(实参)">按钮</button>
  • v-on: 简写为 @

示例

<body>
    <div id="app">
      <button v-on:click="handleClick">按钮1</button>
      <!-- <button v-on:click="handleClick">按钮</button> -->
      
      <!-- v-on:click 简写@click -->
      <button @click="handleClick">按钮2</button>
        <!-- <button @click="changeFlag">按钮3</button> -->
        
        <!-- 事件处理程序写在行内式 -->
        <button @click="flag = false">按钮3</button>
        {{ flag }}
        
        <button @click="add(10)">事件传参</button>
        {{ count }}
    </div>
    <script src="./vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
            flag:true,
            count:0,
            },
            methods: {
                handleClick(){
                    alert('点击');
                },
                changeFlag(){
                    // 修改flag值
                    this.flag = false
                },
                add(num){
                    this.count += num
                }
            }
        })
    </script>
</body>

注意:

  • 事件处理函数应该写到一个跟data同级的配置项(methods)中
  • methods中的函数内部的this都指向Vue实例

给事件处理函数传参

  • 如果不传递任何参数,则方法无需加小括号;methods方法中可以直接使用 e 当做事件对象
  • 如果传递了参数,则实参 $event 表示事件对象,固定用法。

属性绑定指令

动态设置html的标签属性 比如:src、url、title

  • 语法:v-bind:属性名=“表达式”
  • v-bind:可以简写为 => :

例如,有一个图片,它的 src 属性值,是一个图片地址。这个地址在数据 data 中存储。

则可以这样设置属性值:

  • <img v-bind:src="url" />
  • <img :src="url" /> (v-bind可以省略)
<body>
  <div id="app">
    <img v-bind:src="imgUrl" v-bind:title="msg" alt="">
    <img :src="imgUrl" :title="msg" alt="">
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        imgUrl: './imgs/vue.png',
        msg: 'hello Vue'
      }
    })
  </script>
</body>

列表渲染指令

Vue 提供了 v-for 列表渲染指令,用来辅助开发者基于一个数组来循环渲染一个列表结构。

v-for 指令需要使用 (item, index) in arr 形式的特殊语法,其中:

  • item 是数组中的每一项
  • index 是每一项的索引,不需要可以省略
  • arr 是被遍历的数组

此语法也可以遍历对象和数字

案例

<body>
    <div id="app">
        <ul>
            <!-- v-for 加唯一标识 为了正确排序复用 diff算法 提升渲染性能 
            key值唯一,项目中,一般用数据id,有id优先使用,没有id找唯一的数据项,最后找不到用index
        -->
            <li v-for="(item,index) in arr" :key="index">{{ index }}-{{ item }}</li>
        </ul>
        <ul>
            <li v-for="(value, key, index) in stu">{{ index }}-{{ key }}-{{ value }}</li>
        </ul>
    </div>

    <script src="vue.js"></script>
    <script>
        new Vue({
            el: '#app',
            data: {
                arr: ['电视', '手机', '电脑'],
                stu: {
                    name: 'wer',
                    age: '18',
                    sex: '男'
                }
            }
        })
    </script>
</body>

:

  • v-for 加唯一标识 :key="index" 为了正确排序复用 diff算法 提升渲染性能
  • key值唯一,项目中,一般用数据id,有id优先使用,没有id找唯一的数据项,最后找不到用index

双向绑定指令

所谓双向绑定就是:

  1. 数据改变后,呈现的页面结果会更新
  2. 页面结果更新后,数据也会随之而变
  • 作用:表单元素(input、radio、select)使用,双向绑定数据,可以快速 获取设置 表单元素内容
  • 语法:v-model=“变量”
  • 需求: 使用双向绑定实现以下需求
    • 点击登录按钮获取表单中的内容
    • 点击重置按钮清空表单中的内容

在这里插入图片描述

<body>

  <div id="app">
      // v-model 可以让数据和视图,形成双向数据绑定
      // (1) 数据变化,视图自动更新
      // (2) 视图变化,数据自动更新
      // 可以快速[获取]或[设置]表单元素的内容

    账户:<input type="text" v-model="username"> <br><br>
    密码:<input type="password" v-model="password"> <br><br>
    <button @click="login">登录</button>
    <button @click="reset">重置</button>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
    const app = new Vue({
      el: '#app',
      data: {
        username: '',
        password: ''
      },
      methods: {
        login () {
          console.log(this.username, this.password)
        },
        reset () {
          this.username = ''
          this.password = ''
        }
      }
    })
  </script>
</body>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值