Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

VueJS - Swap component on click

Tags:

vue.js

In my application I have many buttons. When I press it the button I would like to load a template (that replaces the selected button):

Templates:

Vue.component('component-1', {...});
Vue.component('component-2', {...});

Buttons:

<div id="toReplace">
  <button>Button1</button>
  <button>Button2</button>
</div>

In this case, when I press Button1 the content of the div toReplace should be component-1. Sure, each component should have a "close" button that will show the buttons again (in short, the div toReplace) on press.

like image 387
Mistre83 Avatar asked Sep 08 '16 12:09

Mistre83


1 Answers

You need to bind a variable to :is property. And change this variable on button click. Also you will need to combine it with some v-show condition. Like so:

<div id="toReplace">
    <div :is="currentComponent"></div>
    <div v-show="!currentComponent" v-for="component in componentsArray">
      <button @click="swapComponent(component)">{{component}}</button>
    </div>
</div>
<button @click="swapComponent(null)">Close</button>
new Vue({
  el: 'body',
  data: {
    currentComponent: null,
    componentsArray: ['foo', 'bar']
  },
  components: {
    'foo': {
      template: '<h1>Foo component</h1>'
    },
    'bar': {
      template: '<h1>Bar component</h1>'
    }
  },
  methods: {
    swapComponent: function(component)
    {
      this.currentComponent = component;
    }
  }
});

Here is quick example:

http://jsbin.com/miwuduliyu/edit?html,js,console,output

like image 130
GONG Avatar answered Oct 01 '22 06:10

GONG