| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- // demo data
- var data = {
- name: 'My Tree',
- children: [
- { name: 'hello' },
- { name: 'wat' },
- {
- name: 'child folder',
- children: [
- {
- name: 'child folder',
- children: [
- { name: 'hello' },
- { name: 'wat' }
- ]
- },
- { name: 'hello' },
- { name: 'wat' },
- {
- name: 'child folder',
- children: [
- { name: 'hello' },
- { name: 'wat' }
- ]
- }
- ]
- }
- ]
- }
- // define the item component
- Vue.component('item', {
- props: ['model'],
- template: '#item-template',
- replace: true,
- data: function () {
- return {
- open: false
- }
- },
- computed: {
- isFolder: function () {
- return this.model.children &&
- this.model.children.length
- }
- },
- methods: {
- toggle: function () {
- if (this.isFolder) {
- this.open = !this.open
- }
- },
- changeType: function () {
- if (!this.isFolder) {
- this.model.$add('children', [])
- this.addChild()
- this.open = true
- }
- },
- addChild: function () {
- this.model.children.push({
- name: 'new stuff'
- })
- }
- }
- })
- // boot up the demo
- var demo = new Vue({
- el: '#demo',
- data: {
- treeData: data
- }
- })
|