在Vue.js中重写属性和方法的正确方法

Proper way to override properties and methods in Vue.js?

本文关键字:方法 属性 Vue js 重写      更新时间:2023-09-26

在Vue.js中使用mixins重写方法的正确方法是什么?我知道你可以使用mixins模拟继承,但是让我们假设你想扩展一些道具,但不完全覆盖整个道具的值。

例如,我有一个baseCell,但我也需要有组件,将相似,但功能不同的<td> s和<th> s,所以我创建了两个额外的组件,使用baseCell作为mixin。

var baseCell = {
  ...
  props: {
    ...
    initWrapper: {
      type: String,
      default: 'td'
    },
    ...
  },
  methods: {..}
};

在组件中设置这样的道具将完全覆盖所有的值。

Vue.component('tableHeader', {
  mixins: [baseCell],
  props: {
    initWrapper: {
      default: 'th'
    }
  }
}

我已经想出了一个合并属性的解决方案,但它似乎有点黑客,我不确定是否有更好的解决方案。

Vue.component('tableHeader', {
  mixins: [baseCell],
  props: Object.assign({}, baseCell.props, {
    initWrapper: {
      default: 'th'
    }
  })
});

这样,我保留了baseCell道具,但在传递的对象中定义了一些。

可以在文档中找到一个例子:https://v2.vuejs.org/v2/guide/mixins.html Custom-Option-Merge-Strategies