javascript - 在 Vue.js 中覆盖属性和方法的正确方法?

标签 javascript vue.js vuejs2

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

例如,我有一个 baseCell,但我还需要具有与 <td> 相似但功能不同的组件s 和 <th> s,所以我创建了两个使用 baseCell 作为混合的附加组件。

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

在组件中设置 Prop 将完全覆盖所有值。

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

我想出了一个合并属性的解决方案,但它看起来有点老套,我不确定是否有更好的解决方案。

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

有了这个,我保留了 baseCell Prop ,但传递了对象中的一些定义的 Prop 。

最佳答案

在 Vue > 2.2 中,您可以使用自定义选项合并策略来实现您想要的。请注意,该策略适用于所有混合。

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

关于javascript - 在 Vue.js 中覆盖属性和方法的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40639128/

相关文章:

javascript - 我无法在 vue js 中传递 lat 和 lng 的值?

vue.js - 如何将路由参数作为数字传递?

javascript - 我如何测试带有 api 调用的 jest 的 vuex Action ?

vue.js - `This` 在 vue.js 观察器中未定义

javascript - 在 Enter 键上确认 Jquery UI 对话框提示

javascript - jQuery 自动完成功能在选择后阻止焦点

javascript - 切换 - 在 div 外部单击时隐藏项目

javascript - 在 <s :if test =""> tag including equalsIgnore case in Struts2 中检查 endswith() 的最佳方法

javascript - 找不到模块 : Error: Can't resolve vue, 路径不正确

unit-testing - 如何修复错误 import Vue from 'vue' 导致 SyntaxError : Unexpected identifier