美文网首页
Vue 创建单页面程序

Vue 创建单页面程序

作者: 骑代码奔小康 | 来源:发表于2018-11-21 12:08 被阅读0次

    作为一个小公司的PHPER,不喜欢乌漆墨黑的命令行(老是报错,技术又不好找不到解决方法),研究了半天vue-click以后,选择了放弃,这里用vue创建一个单页面程序,不多说上代码!

    引入vue相关的CDN,建议在https://www.bootcdn.cn/去找,

    1. vue.js的CDN https://cdn.bootcss.com/vue/2.5.17-beta.0/vue.js
    2. vue的路由 https://cdn.bootcss.com/vue-router/3.0.1/vue-router.js
    3. vue状态管理vuex https://cdn.bootcss.com/vuex/3.0.1/vuex.js

    html代码只有body 部分

    <body>
        <div id="app">
            <div class="row">
                <div class="col-xs-offset-2 col-xs-8">
                    <div class="page-header">
                        <h2>Router Test</h2>
                    </div>
                </div>
            </div>
            <div class="row">
                <div class="col-xs-2 col-xs-offset-2">
                    <div class="list-group">
                        <!--使用指令v-link进行导航-->
                        <router-link to='/home' class="list-group-item"  >Home</router-link>
                        <router-link to='/about'  class="list-group-item"  >About</router-link>
                    </div>
                </div>
                <div class="col-xs-6">
                    <div class="panel">
                        <div class="panel-body">
                            <!--用于渲染匹配的组件-->
                            <router-view></router-view>
                        </div>
                    </div>
                </div>
            </div>
        </div>
       // home路由部分
        <template id="home">
            <div>
                <h1 @click="_alert(123)">Home</h1>
                <p>{{num}}</p>
            </div>
        </template>
      // about路由部分
        <template id="about">
            <div>
                <h1>About</h1>
                <p>{{num}}</p>
            </div>
        </template>
    </body>
    

    js部分的代码

    <script>
    /* 创建一个vuex状态管理 */
    /* 调用Vuex store 的方式只介绍两种  
    * 同步的方式  store.commit('increment','需要传的参数')
    * 异步的方式  store.dispatch('incrementAsync',{ amount: 10  })
    * 直接在组件中使用就行
    */
    const store = new Vuex.Store({
        state: {
            count: 5
        },
        mutations: {/*实际改变参数状态的方法*/
            increment (state, no) {
                state.count = Number(state.count) + Number(no)
            }
        },
        actions: {  /*按我的理解是在actions中调用mutations的方法increment实现异步传输给组件*/
            incrementAsync  (context,payload) {
                context.commit('increment',payload.amount)
            }
        }
    })
    
    
    /* 创建Home 组件构造器  */
    const Home = Vue.extend({
        template: '#home',
        data: function () {
            return {
                msg: 'Hello, vue router!',
                num: ''
            }
        },
        methods:{
            _alert:function (e){
                store.dispatch('incrementAsync',{
                    amount: 10
                }) /* 异步的方式调用vuex */
                this.num = store.state.count  /*获取vuex中count的值*/ 
                console.log( this.num )
            }
        },
        created:function(){
            this.num = store.state.count
            console.log( this.num ) // -> 1
        }
    })
    
    /* About 路由的组件*/
    const About = Vue.extend({
        template: '#about',
        data: function () {
            return {
                msg: 'Hello, vue router6666666666!',
                num: store.state.count
            }
        },
        methods:{
            _alert:function(e){
                alert(e)
            }
        },
    })
    
    /* 创建路由映射  */
    const routes = [
        { path: '/home', component: Home},
        { path: '/about', component: About },
        { path: '/', component: Home }
    ]
    
    /* 创建路由器  */
    var router = new VueRouter({
        routes
    })
    
    //  创建一个顶层的vue实例
    const vm = new Vue({
      // el: 'body',
      router, //  路由
      components: { Home, About },
      template: '#app'
    })
    
    /* 启动路由  */
    const app = new Vue({
        router
    }).$mount('#app')
    </script>
    

    整个完整页面的代码

    <!DOCTYPE html>
    <html>
    
    <head>
        <meta charset="UTF-8">
        <title></title>
        <link rel="stylesheet" href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css" />
    </head>
    <body>
        <div id="app">
            <div class="row">
                <div class="col-xs-offset-2 col-xs-8">
                    <div class="page-header">
                        <h2>Router Basic - 01</h2>
                    </div>
                </div>
            </div>
            <div class="row">
                <div class="col-xs-2 col-xs-offset-2">
                    <div class="list-group">
                        <!--使用指令v-link进行导航-->
                        <router-link to='/home' class="list-group-item"  >Home</router-link>
                        <router-link to='/about'  class="list-group-item"  >About</router-link>
                    </div>
                </div>
                <div class="col-xs-6">
                    <div class="panel">
                        <div class="panel-body">
                            <!--用于渲染匹配的组件-->
                            <router-view></router-view>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        <template id="home">
            <div>
                <h1 @click="_alert(123)">Home</h1>
                <p>{{num}}</p>
            </div>
        </template>
        <template id="about">
            <div>
                <h1>About</h1>
                <p>{{num}}</p>
            </div>
        </template>
    </body>
    <script src="./js/vue.js"></script>
    <script src="./js/vue-router.js"></script>
    <script src="https://cdn.bootcss.com/vuex/3.0.1/vuex.js"></script>
    <script>
    const store = new Vuex.Store({
        state: {
            count: 5
        },
        mutations: {
            increment (state, no) {
                state.count = Number(state.count) + Number(no)
            }
        },
        actions: {
            incrementAsync  (context,payload) {
                context.commit('increment',payload.amount)
            }
        }
    })
    
    /* 创建组件构造器  */
    const Home = Vue.extend({
        template: '#home',
        data: function () {
            return {
                msg: 'Hello, vue router!',
                num: ''
            }
        },
        methods:{
            _alert:function (e){
                store.dispatch('incrementAsync',{
                    amount: 10
                })
                this.num = store.state.count
                console.log( this.num )
            }
        },
        created:function(){
            this.num = store.state.count
            console.log( this.num ) // -> 1
        }
    })
    /* About 路由的组件 */
    const About = Vue.extend({
        template: '#about',
        data: function () {
            return {
                msg: 'Hello, vue router6666666666!',
                num: store.state.count
            }
        },
        methods:{
            _alert:function(e){
                alert(e)
            }
        },
    })
    
    /* 创建路由映射  */
    const routes = [
        { path: '/home', component: Home},
        { path: '/about', component: About },
        { path: '/', component: Home }
    ]
    
    /* 创建路由器  */
    var router = new VueRouter({
        routes
    })
    
    const vm = new Vue({
      // el: 'body',
      router,
      components: { Home, About },
      template: '#app'
    })
    
    /* 启动路由  */
    const app = new Vue({
        router
    }).$mount('#app')
    </script>
    </html>
    

    相关文章

      网友评论

          本文标题:Vue 创建单页面程序

          本文链接:https://www.haomeiwen.com/subject/etwqqqtx.html