vue重新加载子组件

zaq*_*otr 5 vue.js vuejs2

我正在使用vue 2.5.8版

我想重新加载子组件,或重新加载父组件,然后强制重新加载子组件。

我正在尝试使用this。$ forceUpdate(),但无法正常工作。

您知道如何执行此操作吗?

sur*_*hvv 21

对组件使用 :key 并重置密钥。

https://michaelnthiessen.com/force-re-render/

  • 实际上,作者说这是在组件上绑定 v-key 的“最佳”方法。“不使用”是关于 v-if 和 v-key 的。 (2认同)

小智 9

为子组件添加键,然后更新父组件中的键。将重新创建子组件。

<childComponent :key="childKey"/>
Run Code Online (Sandbox Code Playgroud)


Roy*_*y J 5

如果孩子是由一个动态创建的 v-for或其他东西,您可以清除数组并重新分配它,并且孩子将全部重新创建。

要简单地让现有组件响应信号,您需要将事件总线作为 prop 传递,然后发出它们将响应的事件。事件的正常方向是向上,但有时让它们向下是合适的。

new Vue({
  el: '#app',
  data: {
    bus: new Vue()
  },
  components: {
    child: {
      template: '#child-template',
      props: ['bus'],
      data() {
        return {
          value: 0
        };
      },
      methods: {
        increment() {
          this.value += 1;
        },
        reset() {
          this.value = 0;
        }
      },
      created() {
        this.bus.$on('reset', this.reset);
      }
    }
  }
});
Run Code Online (Sandbox Code Playgroud)
<script src="//cdnjs.cloudflare.com/ajax/libs/vue/2.4.2/vue.min.js"></script>
<div id="app">
  <child :bus="bus">
  </child>
  <child :bus="bus">
  </child>
  <child :bus="bus">
  </child>
  <button @click="() => bus.$emit('reset')">Reset</button>
</div>

<template id="child-template">
  <div>
  {{value}} <button @click="increment">More!</button>
  </div>
</template>
Run Code Online (Sandbox Code Playgroud)