我的Vue组件中有一个带有默认值的选项props .

export default {
  props: {
    options: {
      required: false,
      type: Object,
      default: () => ({
        someOption: false,
        someOtherOption: {
          a: true,
          b: false,
        },
      }),
    },
  },
};

如果选项对象作为props 传递给零部件,则会替换默认值.例如,当超过{ someOption: true }时,options对象现在只包含该值.

如何传递部分对象并用给定值覆盖默认值,而不是替换整个对象?

推荐答案

我最近遇到了类似的问题,使用了Object.assign

您的 case 的具体用法如下:

props: {
 options: {
  required: false,
  type: Object,
  default: () => ({}),
 },
},
data(){
  mergedOptions:{},
  defaultOptions:{
    someOption: false,
    someOtherOption: {
      a: true,
      b: false,
    },
  }
},
mounted(){
  //you will have the combined options inside mergedOptions
  Object.assign(this.mergedOptions,this.defaultOptions,this.options)
}

通过这样做,您将只覆盖通过props 传递的属性.不知道这是否是最有效的方法,但它非常容易理解和整洁:)

因此,如果你以props :options={someOption:true}的身份进入,合并的选项将相当于:

{
 someOption: true,
 someOtherOption: {
  a: true,
  b: false,
 },
}

编辑:如果你需要你的数据是react 性的,你可能需要一个计算的.

  computed: {
    mergedOptions(){
      return {
       ...this.defaultOptions,
       ...this.options
      }
    }
  }

Vue.js相关问答推荐

使用nuxt I18N验证规则消息翻译

传单 vue3 组件变体打开错误的标记 - 单击时弹出

Vuetify 3 - NavBar 组件占据整个视口高度

有没有办法将react 键作为值传递给由 v-for 创建的 v-model

vue3 输入标签给出错误 Vue.use 不是函数

如何使用 async/await 在 vue js 中添加标头

将初始值设置为可直接在 HTML 中使用的 vue.js 模型

Webpack - MiniCssExtractPlugin 不提取文件

我可以从手表调用方法并安装吗?

vuejs中watch方法和计算方法有什么区别

数据更新后触发 Vue.js 事件

Vue devServer 代理没有帮助,我仍然收到 CORS 错误

在组件之间共享数据

即使在生产模式下构建,VueJS 也会显示开发模式开发模式消息

Vuejs - 使用 v-if 切换的保持活动组件

来自 Vue.js 的 ESLint 插件的消息中的LHS是什么意思?

Vue.js webpack:如何获取目录中的文件列表?

如何在 Vue.js 中延迟 @keyup 处理程序

表格行上的 Vuejs 转换

Vuejs 组件等待 facebook sdk 加载