VUE框架指令快速入门及详解

本文深入解析Vue.js框架中的核心指令,包括插值表达式、v-text、v-html、v-bind、v-model、v-for、v-on、v-show、v-if等,详细介绍了它们的使用方法、注意事项及应用场景。

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

插值表达式

双大括号叫插值表达式,作用是用来渲染data中的数据的

合法使用方式有以下几种:

  • 直接写一个变量名
  • 字符串拼接
  • 数值运算
  • 三元运算符
  • 函数
<!--html代码-->
<div id="app">
    <h3>{{name}}</h3>
    <p>{{'欧阳'+ name}}</p>
    <p>{{age+1}}</p>
    <p>{{age>=18?'已成年':'未成年'}}</p>
    <p>{{name.split('').reverse().join('')}}</p>
</div>
//javascript代码
let vm = new Vue({
      el: '#app',
      data: {
        name: 'jack',
        age: 17
      }
})

指令

凡是以v-开头的,都叫指令,指令的作用是用来增强html代码功能

v-text指令

v-text和插值表达式区别:v-text写在标签属性位置,{{}}写在标签innerHTML位置。

使用:在标签属性位置写上v-text='data中的变量

<!--html代码-->
<!--开发时使用{{}}就行了-->
<h3 v-text="name"></h3>
<h3 v-text="'欧阳'+name"></h3>
<h3 v-text="age+1"></h3>
<h3 v-text="age>=18?'已成年':'未成年'"></h3>
<h3 v-text="name.split('').reverse().join('')"></h3>
<p>{{msg}}</p>
<p v-text="msg"></p>
//javascript代码
let vm = new Vue({
  el: '#app',
  data: {
    name: 'jack',
    age: 17,
    msg: '<p>hello itcast</p>'
  }
})

v-html指令

要渲染带html标签的字符串,需要使用v-html指令

v-html使用不安全,尽量避免使用

<!--html代码-->
<div id="app">
  <p v-html="msg"></p>
  <p v-html="name"></p>
</div>
//javascript代码
let vm = new Vue({
  el: '#app',
  data: {
    name: 'jack',
    msg: '<p>hello itcast</p>'
  }
})

v-bind指令

作用:动态绑定属性

使用方法: 在标签属性位置 v-bind:需要动态绑定的属性="data中的变量"

简写 : 在标签属性位置 :需要动态绑定的属性="data中的变量"

<!--html代码-->
<div id="app">
    <img v-bind:src="logurl" alt="">
    <img :src="logurl" alt="">
    <a :href="'/del?id=' + id">删除</a>
    <!-- 推荐使用下面这种方式 -->
    <a :href="`/del?id=${id}`">删除</a>

    <!-- 在后面讲到组件的时候,会经常使用下面这种方式 -->
    <p :mylogo="logurl">测试v-bind绑定任意属性</p>

    <!-- 需求:id===1是加上一个myfont的类 -->
    <!-- 动态绑定class使用对象语法,对象的key是一个类名,-->
    <!-- 对象的value是一个布尔值 -->
    <p :class="{myfont: id===1}">测试类名</p>

    <!-- 数组语法了解 -->
    <p :class="['myfont', 'mybackground']">动态绑定class数组语法测试</p>
    <p :class="[id===1 ? 'myfont': '', id===1 ? 'mybackground' : '']">
        动态绑定class数组语法测试
    </p>
</div>
//javascript代码
var vm = new Vue({
  el: '#app',
  data: {
    logurl: './logo.png',
    id: 1
  }
})

v-model指令

指令用于实现双向数据绑定

v-model只适用于input/textarea/select/组件 这几个元素

双向数据绑定: 数据模型的值和视图模型的值进行同步变化 你变我也变,我变我也变

<!--html代码-->
<div id="app">
    <input type="text" v-model="msg">
</div>
//javascript代码
var vm = new Vue({
  el: '#app',
  data: {
    msg: 'hello world',
    list: [
      {name: 'jack', id: 1},
      {name: 'jack2', id: 2},
      {name: 'jack3', id: 3}
    ]
  }
})

v-for指令

v-for指令可以用来渲染数组或者对象。

在渲染数据时,数据模型中的数据变化了之后,视图会跟着变化

1. 数组

  • 在标签的属性位置写上 v-for="item in arr" item为形参,

可以随意起名字,它表示数组中的每一项;arr表示需要循环渲染的数组

  • 在标签的属性位置写上 v-for="(item, index) in arr"

index表示数组项中的索引,名字随意取

2. 对象

  • 在标签的属性位置写上 v-for="val in obj" val为形参,可以随意取名字,

它表示对象中key对应的值;obj表示需要循环的对象

  • 在标签的属性位置写上 v-for="(val, key, index) in obj" key就表示对象的键,

index就表 示这个键所对应的索引,这个索引和数组类似,也是从0开始的

3.注意1

  • 当使用数组的length属性改变数组长度时,不会触发视图的自动更新
  • 当使用数组索引改变数组的时候,也不会触发视图更新
  • 解决方式
    • 使用Vue.set(arr, index, newData) 例如:Vue.set(vm.list, 0, {name: 'lisi', id: 33})
    • 使用数组的splice方法 例如:vm.list.splice(0, 3)

4.注意2

  • v-for指令在使用的时候一定要结合key属性来使用,

这个属性能唯一标识数组中的每一项,

  • 请注意,key的值是唯一且不重复的;它能提升渲染效率
<!--html代码-->
 <div id="app">
    <h1>v-for="item in arr"</h1>
    <ul>
          <li v-for="item in list" :key="item.id">
              {{item.name}}
          </li>
    </ul>
    
    <h1>v-for="(item, index) in arr"</h1>
    <ul>
        <li v-for="(item, index) in list" :key="index">
          {{item.name}} : {{index}}
        </li>
    </ul>
    
    <h1>v-for="val in obj"</h1>
    <ul>
      <li v-for="val in user" :key="val">{{val}}</li>
    </ul>
    <h1>v-for="(val, key, index) in obj"</h1>
    <ul>
      <li v-for="(val, key, index) in user" :key="index">
          {{key}}: {{val}} ===> {{index}}
      </li>
    </ul>
</div>
//javascript代码
var vm = new Vue({
  el: '#app',
  data: {
    list: [
      {name: 'jack1', id: 1},
      {name: 'jack2', id: 2},
      {name: 'jack3', id: 3}
    ],
    user: {
      name: 'zhangsan',
      age: 12,
      id: 6
    }
  }
})

v-on指令

指令用于监听事件,事件可以是click/keyup/keydown/...... 以及自定义事件。

使用方法:

  • 在标签属性位置写上v-on:事件类型="执行的函数"
  • 简写: @事件类型="执行的函数"
  • 给事件传递参数只需要在执行函数中加上参数就可以了
  • 在事件中获取事件对象通过给执行函数传递$event来获取,注意$event只能叫这个名字,并且不能加引号
  • 事件修饰符: 用来增强事件的功能的。 常用的事件修饰符有: .prevent阻止默认行为 .stop阻止冒泡
  • 按键修饰符:按键修饰符主要是给键盘事件使用的,比如keydown,keyup,能够限制用户按的键执行的方法
 <!--html代码-->
<div id="app">
  <p>{{msg}}</p>
  <button v-on:click="changeMsg">点击改变msg</button>
  <button @click="changeMsg">点击改变msg简写形式</button>
  <button @click="changeMsgByarg('heima')">点击改变msg传参形式</button>
  <button @click="getEventObj($event)">点击获取事件对象</button>
  <a href="http://www.baidu.com" @click.prevent="getBrand">不跳转到百度</a>
  <div>
    <input type="text" v-model="inputVal" @keydown.13="printInput">
    <input type="text" v-model="inputVal" @keydown.enter="printInput">
    <input type="text" v-model="inputVal" @keydown.f4="printInput">
  </div>
</div>
//javascript代码
// 自定义一个f4按键修饰符
Vue.config.keyCodes.f4 = 115
var vm = new Vue({
  el: '#app',
  data: {
    msg: 'hello itcast',
    inputVal: ''
  },
  // 函数的定义在methods属性中
  methods: {
    // es6中函数写法
    changeMsg() {
      console.log(this === vm);
      // this代表的就是vue实例
      this.msg = 'hello world'
    },
    changeMsgByarg(val) {
      this.msg = val
    },
    getEventObj(evt) {
      console.log(evt);
    },
    getBrand() {
      console.log('baidu');
    },
    printInput() {
      console.log(this.inputVal);
    }
  }
})

v-show和v-if指令

  • 都能够用来控制元素的显示于隐藏
  • 使用方式: 标签属性位置v-if v-show="布尔值" 为true表示显示, 为false表示隐藏
  • 二者区别:
    • v-show通过样式display: none来控制元素的显示与隐藏
    • v-if通过操控dom来控制元素的显示与隐藏
  • 使用场景的区别:
    • 在涉及到大量dom频繁显示与隐藏切换的时候就用v-show
    • 在涉及到异步数据渲染时,用v-if好一些
<!--html代码-->
<div id="app">
  <p v-show="isVisible">v-show</p>
  <p v-if="isVisible">v-if</p>
  <button @click="toggle">点击切换显示与隐藏</button>
</div>
//javascript代码
var vm = new Vue({
  el: '#app',
  data: {
    isVisible: false
  },
  methods: {
    toggle() {
      setTimeout(() => {
        this.isVisible = !this.isVisible
      }, 2000);
    }
  }
})

v-if,v-else-if,v-else指令

用于条件判断

 <!--html代码-->
<div id="app">
  <div v-if="score>=90">优</div>
  <div v-else-if="score>=80">良</div>
  <div v-else-if="score>=70">中</div>
  <div v-else>差</div>
</div>
//javascript代码
var vm = new Vue({
  el: '#app',
  data: {
    score: 70
  }
})

v-cloak指令

 <!--html代码-->
<!-- 通过v-cloak指令解决表达式闪烁问题,它必须结合css样式来解决-->
<div id="app">
  <!-- 当vuejs文件加载进来之后,它会移除掉标签上面的v-cloak指令 -->
  <p v-cloak>{{msg}}</p>
</div>
//javascript代码
var vm = new Vue({
  el: '#app',
  data: {
    msg: 'hello world'
  }
})

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值