Vue-常用系统指令v-bind、v-on、v-model、v-for和 key 属性的使用

本文详细介绍了Vue中常用的几个系统指令,包括v-bind用于动态绑定元素或组件的特性,v-on用于事件监听,v-model实现双向数据绑定,v-for进行数据遍历。此外,还强调了key属性的重要性,特别是在使用v-for时,key属性有助于Vue识别并更新DOM元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

v-bind
  • 该指令可以给 HTML 元素或者组件动态地绑定一个或多个特性,比如:style、class。

    <!-- 绑定的属性的等号右侧值未加引号时会将其作为 vue 实例中的属性解析,加了引号后会将其作为普通字符串使用 -->
    <input type="button" name="" v-bind:value="myType" v-bind:title="msg">
    
  • v-bind 指令可简写为 : ,绑定的属性中可以写合法的 JS 代码。

    <input type="button" name="" :value="myType + 'v-bind'" :title="msg">
    
  • 绑定 style

    <p :style="styleA">单个行内样式</p>
    <p :style="{fontSize: size + 'px'}">对象:可让指令与普通样式属性共存</p>
    <p :style="[styleA, styleB]">数组:绑定一个 行内样式 列表</p>
    
  • 绑定 class

    <p :class="classA">单个</p>
    <p :class="[classA, classB]">数组:类选择器列表</p>
    <p :class="{red: flagA}">对象:可判定是否使用选择器(貌似不能使用 data 中的)</p>
    <p :class="[{B: flagA}, classA, flagA? 'white' : '']">对象数组:可判定是否使用非 data 中的选择器(需要加引号)</p>
    

    css:

    .A {
        border: 2px solid blue;
    }
    .B {
        background: yellow;
    }
    .red {
        background: red;
    }
    .white {
        color: white;
    }
    

    JS:

    let vm = new Vue({
        el: "#app",
        data: {
            myType: 'button',
            msg: 'class style',
            flagA: true,
            flagB: false,
            classA: 'A',
            classB: 'B',
            size: '30',
            styleA: {color: 'pink'},
            styleB: {textDecoration: 'line-through'}
        }
    })
    
v-on
  • 用于绑定事件监听,用在普通的 HTML 元素上时,只能监听 原生 DOM 事件。用在自定义元素组件上时,也可以监听子组件触发的自定义事件。

  • v-on 指令可简写为 @

    <input type="button" :value="msg" @click="show">
    
  • 调用函数时,如果没有传参,可省略 “()” ,直接使用函数名。

    <input type="button" :value="msg" v-on:click="show">
    

    JS:

    new Vue({
        el: '#app',
        data: {
            msg: 'button'
        },
        methods: {
            show(arg) {
                alert('v-on:click')
                console.log(arg)
            }
        }
    })
    
  • 常用事件:

    v-on:click // 点击事件
    v-on:keydown // 按键按下事件
    v-on:keyup // 按键抬起事件
    v-on:mousedown // 鼠标按下时的事件
    v-on:mouseover // 鼠标进入事件
    v-on:submit // 表单提交

v-model
  • 该指令可以在表单控件或者组件上实现数据的双向绑定。

    • inputselecttextareacomponents(Vue中的组件)。。。
    <input type="text" name="" v-model="msg">
    
v-for
  • 该指令可用于遍历 数组、对象、数字

  • 未来,数据中的某一项的值发生了改变,则 v-for 只会更新当前项对应的这个 DOM 元素的值,而不是更新整个数据,从而提高效率。

    • 遍历普通数组

      <ul>
          <!-- 循环普通数组的值,item 为每一项的值, list 为被遍历的数组 -->
          <li v-for='item in list' v-text='item' v-cloak></li>
      </ul>
      
    • 遍历数组中的值和索引

      <ul>
          <!-- 循环数组的值和下标,i 即为数组元素下标 -->
          <li v-for='(item, i) in list' v-cloak>{{ item }}, {{ i }}</li>
      </ul>
      
    • 遍历对象数组

      <!-- 遍历对象数组 -->
      <ul>
          <!-- 遍历 users 对象数组中的成员,user 为对象成员,i 为当前对象在数组中的索引 -->
          <li v-for="(user, i) in users" v-cloak>{{user.id}},{{user.name}},{{i}}</li>
      </ul>
      
    • 遍历对象中的键值对

      <ul>
          <!-- key 为被遍历对象中的属性名, value 为对应的属性值-->
          <li v-for="(value, key, i) in obj" v-cloak>{{ value }},{{ key }},{{ i }}</li>
      </ul>
      
      
      
    • 迭代数字

      <ul>
          <!-- count 从 1 开始,无法遍历负数-->
          <li v-for="count in 15" v-cloak>{{ count }}</li>
      </ul>
      

      CSS:

      [v-cloak] {
          display: none;
      }
      

      JS:

      new Vue({
         el: '#app',
         data: {
             list: [1,3,5,7,9,11],
             users: [
                 { id: 1, name:  '苏小小'},
                 { id: 2, name:  '苏妲己'},
                 { id: 3, name:  '苏凌香'},
                 { id: 4, name:  '苏宛儿'}
             ],
             obj: {
                 name: '小青',
                 age: 18,
                 gender: '女',
               hobby: '古筝、琴'
             }
       },
         methods: {
      
         }
      })
      
  • key

    • key 属性具有唯一性,不能重复(key 值必须具有唯一性),它能够标识数组的每一项,在使用 for 循环时最好加上 key 属性,不管用不用得到。

    • 当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用 “就地复用” 策略。如果数据项的顺序被改变,Vue将不是移动 DOM 元素来匹配数据项的顺序, 而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过的每个元素。

    • 为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,需要为每项提供一个唯一 key 属性。

      <!-- 用于添加 id -->
      <label for="id">ID:</label>
      <input type="text" id="id" v-model="uid">
      <!-- 用于添加用户名称 -->
      <label for="name">name:</label>
      <input type="text" id="name" v-model="uname">
      <!-- 点击时调用添加用户的方法 -->
      <input type="button" name="" @click="add" :value="msg">
      <!-- 遍历用户 -->
      <p v-for="item in users" v-bind:key="item.id" v-cloak>
          <input type="checkbox" name=""  v-cloak>{{ item.id }}, {{ item.name }}
      </p>
      

      CSS:

      [v-cloak] {
          display: none;
      }
      

      JS:

      new Vue({
          el: '#app',
          data: {
              uid: '',
              uname: '',
              msg: '添加',
              users: [
                  { id: 1, name:  '苏小小'},
                  { id: 2, name:  '苏妲己'},
                  { id: 3, name:  '苏凌香'},
                  { id: 4, name:  '苏宛儿'}
              ]
          },
          methods: {
              add() {
                  let name = this.uname
                  let id = this.uid
                  let newUser = {id, name}
                  // 添加成员
                  this.users.unshift(newUser)
                  
                  // 添加完成后,将文本框的值置空
                  this.uname = ''
                  this.uid = ''
              }
          }
      })
      

    注:

    以下变动不会触发视图更新

    • 通过索引给数组设置新值
    • 通过 length 改变数组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值