[Vue warn]: Computed property “xxxx“ was assigned to but it has no setter.

本文介绍了Vue.js中计算属性的特性,强调了计算属性默认只有getter而无setter,因此不能直接修改。当需要通过计算属性改变数据时,可以通过自定义setter实现。示例展示了如何在组件中定义一个带有setter的计算属性`messageCom`,并展示了如何在数据变更时触发计算属性的更新。

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

报错信息:

[Vue warn]: Computed property “messageCom” was assigned to but it has no setter.

原文含义:计算属性messageCom被定义了但是没有setter属性,也就是不能给这个计算属性赋值
原因:计算属性默认只有getter,没有setter,所以计算属性不支持数据的修改,只能对data中的数据进行引用计算。
如果实在想通过计算属性修改data中的值,从而使得计算属性的值也被修改的话,可以自定义setter和getter方法

<div id="app">
    <to-item v-bind:[itemname]="messageCom"></to-item>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
  <script>
      Vue.component('to-item', {
            props: ['todo'],
            template: '<span>{{ todo }}</span>',
        })

      const vue = new Vue({
        el: '#app',
        data: {
          message: '页面加载于' + new Date().toLocaleString(),
          seen: true,
          itemname: 'todo'
        },
        computed: {
          messageCom: {
            set(dataV) {
              this.message = dataV;
            },
            get() {
              return this.message; 
            } 
          }
        }
      })
  </script>

当修改数据vue.messageCom = 2的时候,相应的data中的数据this.message就会被修改,此时由于messageCom依赖于message,所以messageCom重新开始计算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值