3

我有一个使用Vue 类组件定义的组件,如下所示:

@Component
export default class MyComponent extends Vue {
  value = 0;
}

我需要将该组件反复实例化为根组件,每次传入不同的数据。例如,我试过这样做:

const vm = new Vue({
  el: myElement,
  render: (h) => h(MyComponent),
  data: {value: 1},
});

但是当我this.value在组件中查看时,它被设置为 0 而不是 1。无论如何我是否可以指定我希望使用调用时传入的值来实例化组件new Vue

4

1 回答 1

1

您尝试的方法不起作用,因为您的根组件正在呈现MyComponent为子组件,并且根组件中定义的数据与子组件的数据是分开的。它们是两个不同的组件,这里没有覆盖。

我不熟悉 Vue 类组件,但这里有一个香草解决方案。该类MyComponentextends Vue,因此您可以MyComponent直接将其实例化为根组件,并且您在其实例化期间提供的任何其他选项都将混合到基本选项中。

所以你只需要这样做:

const vm = new MyComponent({
  el: myElement,
  data: { value: 1 },
})

无需指定渲染函数,因为它已经由MyComponent.

这是一个可运行的片段,演示了我的意思:

const MyComponent = Vue.extend({
  template: '<div>{{ value }}</div>',
  data() {
    return {
      value: 'base'
    }
  }
})

new MyComponent({
  el: '#app',
  data: {
    value: 'extended'
  }
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app"></div>

于 2020-09-20T09:13:59.793 回答