如何从另一个组件加载 vuejs 动态组件

Posted

技术标签:

【中文标题】如何从另一个组件加载 vuejs 动态组件【英文标题】:how to load vuejs dynamic component from another component 【发布时间】:2017-09-21 20:34:20 【问题描述】:

我正在使用 laravel 和 vuejs2,如您所知,我们可以使用动态组件和当前视图 var 加载组件

现在我使用这种方法加载了一个组件,现在我想从我加载的这个组件中加载另一个组件(这个组件将删除,另一个将替换为它)

我该怎么做?

import example from './components/Example.vue';
import example2 from './components/Example2.vue';
import login from './components/Login.vue';

Vue.component('example', example);
Vue.component('example2', example2);
Vue.component('login', login);



const app = new Vue(
el: '#content',
data: 
    currentView: '',
    show: true
,
methods:
    example1: function() this.currentView =  'login'; ,
    example2: function() this.currentView =  'example2'; ,
    noview: function() this.currentView =  ''; 

);

<component :is='currentView'>   </component>

【问题讨论】:

【参考方案1】:

从组件中发出一个指示要加载的组件的事件,并在 Vue 中监听该事件。

假设以下组件是您要导入主文件的组件。请注意单击按钮时的$emit

const Example1 = 
  template:`
    <div>
      <h1>Example One</h1>
      <button @click="$emit('change-component', 'example 2')">Load Example Two</button>
    </div>
  `


const Example2 = 
  template:`
    <div>
      <h1>Example Two</h1>
      <button @click="$emit('change-component', 'example 1')">Load Example One</button>
    </div>
  `

然后在你的 Vue 模板中,监听 change-component 事件。

<component :is='currentView' 
         @change-component="onChangeComponent">
</component>

在您的 Vue 中,处理事件并更改 currentView

new Vue(
  el:"#content",
  data: 
      currentView: Example1,
      show: true
  ,
  methods:
    onChangeComponent(comp)
      if (comp === "example 1")
        this.currentView = Example1
      if (comp === "example 2")
        this.currentView = Example2
    
  
)

Example.

【讨论】:

以上是关于如何从另一个组件加载 vuejs 动态组件的主要内容,如果未能解决你的问题,请参考以下文章

Vuejs大应用懒加载动态组件

Vue.js - 是不是可以使用 Javascript 动态导入从另一台服务器加载组件?

如何从另一个组件返回到另一个组件而不以角度重新加载组件?

关于在vuejs中动态加载不确定数量和内容的组件的解决方案

vue.js 2.0 在 laravel 5.3 中动态加载组件

视图完全加载后如何从另一个组件调用方法(AppComponent)?