vue指令,你真得懂

前言

接着之前的学习(详情之前的文章),今天我们要讲的是

csharp 复制代码
v-bind
v-on

到此,常用的指令我们就要讲完了(在为大家讲解时,用的是选项式API,这样是为了方便大家理解),还有一些会在后续使用到的时候再给大家讲解。并且本篇文章还会穿插一些选项式API的知识点。

其他不常用指令

v-bind

v-bind 用于动态地将一个或多个 HTML 属性绑定到 Vue 实例中的数据。它是 Vue 的数据绑定系统的一部分,允许你在 HTML 中使用 Vue 实例中的数据,实现数据与视图的双向绑定。

在 Vue.js 中,v-bind 的一般用法是通过简化的缩写 : 来表示。

来看一个例子: 当我们要往页面引入一张图片,常规做法是这样

ini 复制代码
 <img src="https://img1.baidu.com/it/u=3519458463,1887460190&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500" alt="">

而使用v-bind则会方便许多,或者使用简化版,前面加个 :就行。

ini 复制代码
 <img width = "200" v-bind:src="imgUrl" alt="">
 <img width = "200" :src="imgUrl" alt="">

在数据源中写好 imgUrl (bind绑定的属性)地址 。

javascript 复制代码
data() {
     return{
     imgUrl:'https://img1.baidu.com/it/u=3519458463,1887460190&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500',
                }
            },

v-on

v-on 用于监听 DOM 事件,并在事件触发时执行相应的事件处理函数。通过 v-on,你可以在 Vue 实例中定义事件处理逻辑,实现用户与应用程序的交互。

v-on 的一般语法是通过简化的缩写 @ 来表示。

实现一个按钮,每点一次数据加1

xml 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    
</head>
<body>
    <div id="app"></div>
    <template id="my-app">
        <h2>{{ count }}</h2>
        <button @click="handleAdd">+</button>
    </template>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/3.3.4/vue.global.js"></script>
    <script>
        Vue.createApp({
            template: '#my-app',
            data() {
                return{
                    count: 1
                }
            },
            methods : {
                handleAdd(){
                    this.count += 1

                }
            }
        }).mount('#app')
    </script>
</body>
</html>

在template中给button按钮一个监听事件,在method中写好该事件执行的加1操作

选项式API------computed

computed 是 Vue.js 框架中的一个属性,用于在 Vue 实例中声明计算属性。计算属性是基于 Vue 实例的数据属性计算而来的属性,它的值会根据相关的数据属性的变化而自动更新

通过 computed,你可以在 Vue 实例中定义一些衍生出来的属性,而这些属性的值是通过对其他属性进行计算而得到的。这有助于将模板中的逻辑保持简单,而把复杂的计算过程放在计算属性中。

实现如下效果:根据当前温度建议你穿衣。

xml 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="app"></div>

  <template id="my-app">
    <h2>当前温度:{{temp}}</h2>
    <h3>建议穿:{{cloth}}</h3>

    <button @click="minus">-5</button>
    <button @click="add">+5</button>

  </template>


  <script src="https://cdn.bootcdn.net/ajax/libs/vue/3.3.4/vue.global.js"></script>
  <script>
    Vue.createApp({
      template: '#my-app',
      data() {
        return {
          temp: 20,
          // cloth: '夹克'  //不能与computed中的属性同名,或者说computed中的属性不需要写进数据源中
        }
      },
      computed: { // 计算属性是响应式执行的
        cloth() { // 函数会在所依赖的变量值发生改变时自动重新执行
          if (this.temp <= 10) {
            return  '棉袄'
          } else if (this.temp <= 20) {
            return '夹克'
          } else {
            return '短袖'
          }
        }
      },
      methods: {
        minus() {
          this.temp -= 5
        },
        add() {
          this.temp += 5
        }
      }
    }).mount('#app')
  </script>
</body>
</html>

注意computed也是写在vue.createApp下,和data同级,上下顺序没有规定。

效果如下:(自己也可以体验一下)

选项式API------watch

在Vue.js中,watch 是一个用于观察 Vue 实例数据变化的选项。通过使用 watch,你可以在数据变化时执行自定义的函数,从而执行一些操作,如异步请求、复杂计算等。

watch 选项可以接收一个对象,对象的属性是要观察的数据属性,而属性值是一个回调函数,用于处理数据变化的逻辑。

还是实现如上效果,我们注意观察代码区别:

xml 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <div id="app"></div>

  <template id="my-app">
    <h2>当前温度:{{temp}}</h2>
    <h3>建议穿:{{cloth}}</h3>

    <button @click="minus">-5</button>
    <button @click="add">+5</button>

  </template>


  <script src="https://cdn.bootcdn.net/ajax/libs/vue/3.3.4/vue.global.js"></script>
  <script>
    Vue.createApp({
      template: '#my-app',
      data() {
        return {
          temp: 30,
          cloth: '夹克'
        }
      },
      watch: {
        temp: {
          handler: function (newVal, oldVal) {
            if (newVal <= 10) {
              this.cloth = '棉袄'
            } else if (newVal <= 20) {
              this.cloth = '夹克'
            } else {
              this.cloth = '短袖'
            }
          },
          immediate: true  // 立即执行
        }
      },
      methods: {
        minus() {
          this.temp -= 5
        },
        add() {
          this.temp += 5
        }
      }
    }).mount('#app')
  </script>
</body>

</html>

computed 和 watch的区别

  • 如果你需要计算一个新的属性值,并希望该值是基于其他数据属性的动态计算得出的,而且希望有缓存机制,那么应该使用 computed
  • 如果你需要在某个数据变化时执行异步或复杂的操作,或者需要监听某个数据的变化做出相应的响应,那么应该使用 watch
  • 通常情况下,如果你只是简单地获取或设置数据,并且希望有一些自动的处理,使用 computed 更直观。如果需要执行一些特定逻辑,使用 watch 更灵活。
相关推荐
独泪了无痕2 小时前
Vue调试神器:Vue DevTools使用指南
vue.js·前端工程化
Moment4 小时前
Vibe Coding 时代,到底该选什么样的工具来提升效率❓❓❓
前端·后端·github
IT_陈寒5 小时前
SpringBoot性能飙升200%?这5个隐藏配置你必须知道!
前端·人工智能·后端
小时前端6 小时前
React性能优化的完整方法论,附赠大厂面试通关技巧
前端·react.js
Nicko6 小时前
Jetpack Compose BOM 2026.02.01 解读与升级指南
前端
小蜜蜂dry6 小时前
nestjs学习 - 控制器、提供者、模块
前端·node.js·nestjs
优秀稳妥的JiaJi6 小时前
基于腾讯地图实现电子围栏绘制与校验
前端·vue.js·前端框架
前端开发呀7 小时前
从 qiankun(乾坤) 迁移到 Module Federation(模块联邦),对MF只能说相见恨晚!
前端
没想好d7 小时前
通用管理后台组件库-10-表单组件
前端
好雨知时节t7 小时前
Pinia中defineStore的使用方法
vue.js