如何将对象的属性作为属性传递给vue.js组件

时间:2020-02-27 11:21:22

标签: javascript vue.js vue-props

给出以下组件:

<script>
export default {
  name: 'MyComponent',
  props: {
    blueprint: {
      type: Object,
      default () {
        return {
          attribute: 0,
          otherAttribute: 5
        }
      }
    }
  },
  data () {
    return {
      attribute: this.blueprint.attribute,
      otherAttribute: this.blueprint.otherAttribute
    }
  }
}
</script>

我想使用blueprint属性用一些默认值填充数据字段,这些默认值在使用组件时也可以定义。

但是我怎么只能传递道具blueprint的一个字段? 当我这样做时:

<my-component :blueprint="{attribute: someVar}" />

默认otherAttribute的{​​{1}}当然会消失。

我只能设置道具的一个字段并将其与另一个字段的默认值合并吗,像这样:

blueprint

可悲的是,<my-component :blueprint.attribute="someVar" /> <!-- It doesn't work like this, but maybe you get the idea what I want --> 道具的字段太多,无法单独传递每个字段。

2 个答案:

答案 0 :(得分:1)

是的,您的答案很好。这是我的解决方法

<script>
export default {
  name: 'MyComponent',
  props: {
    blueprint: {
      type: Object
    }
  },
  data () {
    return {
      blueprintDefault: {
          attribute: 0,
          otherAttribute: 5 
      }
    }
  },
  mounted () {
   this.blueprint = {...this.blueprintDefault, ...this.blueprint}
  }
}
</script>

答案 1 :(得分:0)

我找到了一个似乎对我有用的解决方案。我的组件现在看起来像这样:

<script>
export default {
  name: 'MyComponent',
  props: {
    blueprint: {
      type: Object
    }
  },
  data () {
    return {
      attribute: this.blueprint.attribute ?? 0,
      otherAttribute: this.blueprint.otherAttribute ?? 5
    }
  }
}
</script>

我删除了道具的default部分,现在直接在数据中直接设置默认值。这样,如果我的blueprint属性未包含所有属性,则其他默认值仍将存在。