SOURCE

console 命令行工具 X clear

                    
>
console
var loadPage = (id) => {
    let page1 = document.getElementById(id || 'page1');
    return page1.innerHTML;
};

const router = new VueRouter({
    routes: [
        {
            path: '/'
            ,name: 'Home'
            ,redirect: '/page2'
        }
        ,{
            path: '/index/:data'
            ,params: {
                data: '12345'
            }
            ,component: {
                template: loadPage('index')
                ,data: () => {
                    return app._data;
                }
                ,methods: {
                    submit: (event) => {
                        let data = {};
                        if (!event) {
                            //方案一,推荐
                            data = app._data;
                        }else{
                            //方案二
                            let form = event.target;
                            for(let i=0; i<form.length; i++){
                                let node = form[i];
                                let value;
                                switch(node.nodeName){
                                    case 'INPUT':
                                        switch(node.type){
                                            case 'radio':
                                            case 'checkbox':
                                                if(node.checked) value = node.value;
                                                break;
                                            case 'number':
                                            case 'text':
                                            case 'tel':
                                            case 'password':
                                            case 'email':
                                                value = node.value;
                                                break;
                                        }
                                        break;
                                    case 'TEXTAREA':
                                        value = node.value;
                                        break;
                                    case 'SELECT':
                                        for(let o=0; o<node.length; o++){
                                            let opt = node[o];
                                            if(opt.selected) {
                                                if (opt.value) value = opt.value;
                                                else value = opt.innerText;
                                            }
                                        }
                                        break;
                                    default:
                                }
                                if(value!=undefined){
                                    //let attr = node.attributes;
                                    let name = node.name || (''+i);
                                    data[name] = value;
                                }
                            }
                        }
                        alert(JSON.stringify(data));
                        axios.post(window.location.origin+'/push_data', data)
                        .then(response => (this.res = response))
                        .catch((error) => {
                            console.log(error);
                        });
                        //return false;
                    }
                    ,click1: (event) => {
                        alert(event.target.nodeName);
                        top.ContextC = this.$route;//.params;
                        //app.submit();
                    }
                }
            }
        }
        ,{
            path: '/page1/:data1'
            ,component: {
                template: loadPage()
                ,props: ['data1']
            }
            ,props: true
        }
        ,{
            path: '/page2'
            ,component: {
                template: loadPage()
                ,props: ['data1']
            }
            ,props: {
                data1: 'data2'
            }
        }
        ,{
            path: '/page3'
            ,component: {
                template: '#page2'
                ,data: () => {
                    return {
                        data1: 'data333',
                        loading: true,
                        responseText: 'No Data'
                    };
                }
                ,created: () => {
                    console.log('created');
                    //this.loadData();
                }
                ,methods: {
                    loadData: () => {
                        console.log('load data');
                    },
                    test: () => {
                        console.log('children use parent method.');
                    }
                }
            }
            ,children: [
                {
                    path: '/page4'
                    ,template: '#page3'
                    ,methods: {
                        test: () => {
                            this.$parent.test();
                        }
                    }
                }
            ]
        }
        ,{
            path: '/page5'
            ,component: {
                template: '#page3'
            }
        }
    ]
});


const app = new Vue({
    el: '#app'
    ,router: router
    ,data: {
        data1: 'JsRun.net'
        ,data2: '小闪电'
        ,data3: true
        ,data4: ['A']
        ,data5: 'E'
        ,data6: ''
        ,data7: 0
    }
    ,mounted: () => {
        // axios.get(window.location.origin+'/test.json')
        // .then(response => (this.res = response))
        // .catch((error) => {
        //     //alert(error);
        //     console.log(error);
        // });
    }
});
<div id="app">
    <div class="tabHost">
        <router-link to="/index/123455" exact-active-class="_active">Index</router-link>
        <router-link to="/page1/data1" exact-active-class="_active">Page1</router-link>
        <router-link to="/page2" exact-active-class="_active">Page2</router-link>
        <router-link to="/page3" exact-active-class="_active">Page3</router-link>
        <router-link to="/page5" exact-active-class="_active">Page4</router-link>
    </div>
    <hr/>
    <div>
        <router-view></router-view>
    </div>
</div>
<script type="text/html" id="index">
<form v-on:submit.prevent="submit">
    <h3>Global: {{$route.params.data}}</h3>
    <p>Input msg is: {{data1}}</p>
    <input v-model.lazy.trim="data1" name="data1">
<hr/>
    <p>{{data2}}</p>
    <textarea v-modal.lazy="data2" name="data2">{{data2}}111</textarea>
<hr/>
    <p>Check:{{data3}}</p>
    <input type="checkbox" v-model="data3" name="data3">
<hr/>
    <p>CheckBox:{{data4}}</p>
    <input type="checkbox" value="A" v-model="data4" name="data4">
    <input type="checkbox" value="B" v-model="data4" name="data4">
    <input type="checkbox" value="C" v-model="data4" name="data4">
    <input type="checkbox" value="D" v-model="data4" name="data4">
<hr/>
    <p>Radio:{{data5}}</p>
    <input type="radio" value="E" v-model="data5" name="data5">
    <input type="radio" value="F" v-model="data5" name="data5">
    <input type="radio" value="G" v-model="data5" name="data5">
<hr/>
    <p>Select:{{data6}}</p>
    <select v-model="data6" name="data6">
        <option value="">UnSelect</option>
        <option value="1">Select1</option>
        <option value="2">Select2</option>
    </select>
<hr/>
    <p>Only input number:{{data7}}</p>
    <input type="number" v-model.number="data7" name="data7">
<hr/>
    <p>Submit Data</p>
    <button v-on:click.stop.prevent="click1">Click</button>
    <input type="submit" value="Submit">
    </form>
</script>
<script type="text/html" id="page1">
<div>page1 {{data1}}</div>
</script>
<template id="page2">
    <div>page2 : {{data1}}</div>
    <div>
        <router-link to="/page4">page3</router-link>
        <hr/>
        <router-view></router-view>
    </div>
    
    <div v-if="loading">Loading...</div>
    <div>{{responseText}}</div>
</template>
<template id="page3">
    <p>page3....</p>
    <button v-on:click="test">Test</button>
</template>
.tabHost>a{
    color: black;
    text-decoration: none;
    padding: 10px;
    line-height: 32px;
}
._active{
    color: orange;
    background-color: rgb(220, 220, 220);
}

本项目引用的自定义外部资源