在 Vue 3 Typescript 中将道具传递给数据对象

Posted

技术标签:

【中文标题】在 Vue 3 Typescript 中将道具传递给数据对象【英文标题】:Passing a prop to data object in Vue3 Typscript 【发布时间】:2021-12-31 15:53:16 【问题描述】:

我有一个 Vue 组件(一个表),它通过 props 接收一组对象。 现在我想删除、添加或编辑这个数组中的一些条目,但我不能这样做,因为道具是现成的。 所以我想在收到属性后,我只是将那个东西复制到所述组件的数据部分中的一个对象中,我应该能够编辑它,但我还没有找到如何去做。

items 是我的财产,ditems 是我的数据对象

  data() 
    return  ditems: this.items ;
  ,

没有工作,也没有

  data() 
    let pitems = Object.assign(, this.items);
    return  ditems ;
  ,

所以我的想法已经不多了,我希望有人可以帮助我 提前感谢您的宝贵时间

【问题讨论】:

对项目进行深层复制,即ditems: JSON.parse(JSON.stringify(this.items)),然后在您进行更改时使用this.$emit('update', this.ditems),或者使用modelValue prop 和v-model 或使用vuex 代替 @LawrenceCherone 使用 vuex 是什么意思?我该怎么做? 将项目提交到商店,然后您不传递道具,并在您进行更改时将它们提交回 【参考方案1】:

当您尝试编辑 props 值时,您可以使用 Object.assign()JSON.parse(JSON.stringify()) 复制 props 是正确的(顺便说一句,我推荐 JSON 解析方式)。

但是,复制方法最好放在watch 中而不是data() 中,因为 prop 数据最初可能是空的,并且在 api 请求或其他东西之后附带数据。所以你最好这样做:

data() 
  return 
    ditems: 
  

watch: 
  items: 
    handler(val) 
      if (Object.keys(val).length)  // check whether items data is empty
        this.ditems = JSON.parse(JSON.stringify(val))
      
    ,
    deep: true
  

顺便说一句,您使用的似乎是 Vue2,因为 Vue3 使用 setup() 而不是 data()

【讨论】:

你指的是组合API,这两种语法在Vue 3中都是有效的。

以上是关于在 Vue 3 Typescript 中将道具传递给数据对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Vue.js 中将实例化的 Vue 组件作为道具传递?

如何在vue中将不同值的数组作为道具传递

如何在 Vue 中将 API 应用程序密钥作为道具传递

在 React TS 中将道具传递给孩子时出错

在Vuetify和Vue JS中将道具传递给父母

Vue 3 道具验证以及 Typescript