Vue入门:Options Api之data和methods介绍

在Vue3中,data属性必须是一个函数,以实现响应式。数据劫持通过Proxy实现,methods中的函数需避免使用箭头函数,因为这会导致this指向window而非组件实例,影响对data中数据的访问。Vue会自动为methods中的函数绑定this,确保能正确操作组件状态。
摘要由CSDN通过智能技术生成

data属性选项

data是传入对象中的一个选项,也是一个 option api,就是其中的一个属性。

const app = Vue.createApp({
  data() { // data : function() { } es6增强写法
    return {
      message: "hello world"
    }
  }
})
  • 在Vue3中,data属性必须传入一个函数,否则会直接报错
  • data返回的对象会被Vue的响应式系统劫持,可以理解为监听,之后对该对象的修改或访问都会在劫持中被处理,如:
    • 在template或者papp中通过{{counter}}访问counter,可以从对象中获取到数据,所以修改counter的值时,app中的{{counter}}也会发生改变。

Vue3中是用Proxy实现数据劫持的。

methods属性

methods是传入对象中的一个选项,也是一个 option api,就是其中的一个属性。

        <div id="app">
            <h2>计数器counter: {{counter}}</h2>
            <button @click="increment">+1</button>
            <button @click="decrement">-1</button>
        </div>

        <script src="./vue.js"></script>
        <script>
            const app = Vue.createApp({
                data() {
                    return {
                        counter: 0,
                    }
                },
                methods: {
                    // increment: function() {}
                    increment() { // es6写法
                        this.counter++
                    },
                    decrement() {
                        this.counter--
                    },
                },
            })
            app.mount('#app')
        </script>
    </body>

methods属性是一个对象,通常会在这个对象中定义很多方法:

  • 这些方法可以被绑定到模板中
  • 在该方法中,可以使用this关键字来直接访问到data中返回的对象的数据。在执行函数的时候,会绑定一个this,然后访问到data中返回的对象的数据。

Vue官方文档里说明了,不应该使用箭头函数来定义methods函数(例如plus: () => {this.a++})。理由是箭头函数绑定了父级作用域的上下文,所以this将不会按照希望指向组件实例,this.a将是undefined。那么接下来有几个问题:
问题一:为什么不能在methods属性中使用箭头函数
因为在methods中要使用data返回对象的数据,那么这个this是必须有值的,并且希望能通过this获取到data返回的对象中的数据。
那么,我么这个this能是window吗?答案是不能的,因为在window中,我们便无法获取到我们想要的数据(data返回的对象中的数据)了。如果我们使用的是箭头函数,那么这个this就会是window
为什么使用的是箭头函数,这个this就会是window呢?
若把methods中的函数改为箭头函数写法,根据箭头函数的this规则(它会在自己的上层作用域中查找 this),箭头函数没有自己的this,那么其会一直往上找,会找到的是全局作用域,因为它的this指向的是window。
问题二:不使用箭头函数的情况下,this到底指向的是什么?
Vue中就是对methods中的所有函数进行了遍历,并通过bind方法给其绑定this。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值