修改对象的属性会导致只读错误

Ren*_*Ren 6 typescript vue.js element-ui

我遇到这个问题:我试图使用输入表单中的值(<el-input>在示例中)修改对象的属性之一。我们公司的堆栈使用 VueJs + TS + ElementUI。不幸的是,对象的属性似乎不能是反应性的并且处于只读模式。如何使对象属性具有反应性?

HTML/CSS

<el-input v-model="group.groupDescription" type="textarea"></el-input>
Run Code Online (Sandbox Code Playgroud)

JS:

interface ViewGroupResult {
  id: string;
  groupDescription: string;
}

import Vue from 'vue';
import {Component, Watch} from 'vue-property-decorator';
@Component
apollo: {

  group: {
    query() {
          group(groupId: $groupIdOrSlug) { ... }
        }
    },
    variables() {
      groupId: this.id
    },
    fetchPolicy: 'network-only',
    loadingKey: 'groupLoading'
  },

export default class ViewGroupPage extends Vue implements 
    group: ViewGroupResult | null = null;
Run Code Online (Sandbox Code Playgroud)

当我尝试在上面的文本区域中键入某些内容时,组对象的属性的值永远不会更新,group.groupDescription即使它与v-model指令绑定也是如此。

Error in event handler for "input": "TypeError: Cannot assign to read only property 'groupDescription' of object '#<Object>'"

我是否误解了 VueJs 中 getter/setter 绑定到数据属性的方式,或者这是 TypeScript 特定的问题?提前致谢!

小智 0

在 VueJS 中,有严格的参数阻止开发人员直接修改 props。解决方法是将数据属性设置为相应 prop 给出的初始值。IE 给定一个 prop,initialUser我们将设置一个 data 属性,user并使用此方法将其值设置为,this.initialUser您将能够修改user变量,同时仍然通过 prop 获取传递给组件的初始值initialUser。请让我知道,如果你有任何问题。

    props: {
        initialUser: {
            type: Object,
            required: true
        }
    },
    data() {
        return {
            user: this.initialUser
        }
    },
Run Code Online (Sandbox Code Playgroud)