美文网首页
Vue基础(一)

Vue基础(一)

作者: xbmchina | 来源:发表于2018-12-18 23:03 被阅读0次

    Vue-router

    Vue的路由,先献上文档(https://router.vuejs.org/zh-cn/

    路由在Vue全家桶里面定位是什么呢,创建单页应用!简单!我们知道Vuejs是一系列的组件组成应用,既然是组件那么就需要组合起来,将组件(components)映射到路由(routes),然后告诉 vue-router 在哪里渲染它们!

    参考配置:

    import Vue from 'vue'
    import Router from 'vue-router'
    
    Vue.use(Router)
    
    import Layout from '@/views/layout/Layout'
    
    export const constantRouterMap = [
        {
          path: '/',
          component: Layout,
          children: [
            {
              path: '/',
              component: () => import('@/views/login/index')
            }
          ]
        }
    ]
    
    export default new Router({
        // mode: 'history', // require service support
        scrollBehavior: () => ({ y: 0 }),
        routes: constantRouterMap
      })
    

    Vuex

    献上文档(https://vuex.vuejs.org/zh-cn/

    Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。什么是状态管理?可以简单理解为管理数据流,多页面共享一个data库(全局)。

    参考配置:
    test.js

    const test = {
        state: {
            mytest: '12312312313'
        }
    }
    
    export default test
    

    index.js

    import Vue from 'vue'
    import Vuex from 'vuex'
    import app from './modules/app'
    import test from './modules/test'
    import getters from './getters'
    
    Vue.use(Vuex)
    
    export default new Vuex.Store({
        modules: {
            app,
            test
        },
        getters
      })
    

    在组件调用

    <template>
        <div>
            这是一个layout{{userame}}
            <a @click="handleLogin">点击我</a>
        </div>
    </template>
    
    <script>
    import { getTest } from '@/api/login'
    
    export default {
        name: 'Layout',
        data() {
            return {
                userame: this.$store.state.test.mytest 
            }
        },
        computed: {
            count () {
                return this.$store.state.test.mytest 
            }
        },
        methods: {
            handleLogin() {
                getTest(this.userame).then(response => {
                    alert(response.data);
                })
            }
        }
    }
    </script>
    

    axios

    封装的ajax,可以根据自己的项目情况再进行封装,然后action中调用。具体可以参考https://github.com/mzabriskie/axios

    参考配置:
    封装 request.js请求工具

    import axios from 'axios'
    // import store from '@/store'
    
    // 创建axios实例
    const service = axios.create({
        baseURL: '',
        timeout: 15000 // 请求超时时间
    })
    
    service.interceptors.response.use(
        function (response) {
            //请求正常则返回
            return Promise.resolve(response)
        },
        function (error) {
            // 请求错误则向store commit这个状态变化
            // const httpError = {
            //     hasError: true,
            //     status: error.response.status,
            //     statusText: error.response.statusText
            // }
            // store.commit('ON_HTTP_ERROR', httpError)
            return Promise.reject(error)
        }
    )
    export default service
    

    自定义的api请求login.js

    import request from '@/utils/request'
    
    export function getTest(params) {
        return request({
            url: '/u/register',
            method: 'get',
            params
        })
    }
    

    在组件中调用

      <template>
        <div>
            这是一个layout{{userame}}
            <a @click="handleLogin">点击我</a>
        </div>
    </template>
    
    <script>
    import { getTest } from '@/api/login'
    
    export default {
        name: 'Layout',
        data() {
            return {
                userame: this.$store.state.test.mytest 
            }
        },
        computed: {
            count () {
                return this.$store.state.test.mytest 
            }
        },
        methods: {
            handleLogin() {
                getTest(this.userame).then(response => {
                    alert(response.data);
                })
            }
        }
    }
    </script>
    

    总结

    参考GitHub 整合源码

    相关文章

      网友评论

          本文标题:Vue基础(一)

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