Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.16/vue.js"></script>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
  <!-- Component selector -->
  <select v-model="currentComponent">
    <option v-for="comp in componentList" v-bind:value="comp.id">{{comp.name }}</option>
  </select>
  
  <!-- Current component -->
  <component :is="currentComponent"></component>
  
  {{ componentListComputed | json }}
  
  
  
  
</body>
</html>
 
// This is a component definition
var ComponentA = Vue.extend({
  template: 'I am component A' 
});
// The ideal scenario would be to define the component name
// directly inside it.
var ComponentB = Vue.extend({
  template: 'I am component B'
});
// ..But this is the list I am currently having to maintain separately
var componentList = [
  // The name property is important and is a human-readable
  // description that the select element will show.
  
  { name: 'Component A', id: 'component-a' },
  { name: 'Component B', id: 'component-b' }
  
];
new Vue({
  
  el: 'body',
  
  data: {
    someOtherData: '',
    
    // The list is linked here...
    componentList: componentList,
    
    // A default component is provided here...
    currentComponent: 'component-a',
  },
    
  // And, if I am using this property below, why can't I use it
  // to fetch the list instead?
  components: {
    'component-a': ComponentA,
    'component-b': ComponentB
  },
 
  // Here's what I tried doing:
  computed: {
    
    componentListComputed: function() {
       // use this.$options.components instead?
    }
  }
  
});
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
anonymouspro
0viewers