美文网首页
vue移动端入门小项目

vue移动端入门小项目

作者: coffee1949 | 来源:发表于2019-08-14 18:34 被阅读0次

    1.始化项目

    vue init webpack my-app
    cd my-app
    npm run dev
    

    2.配置rem适配方式 && 封装http请求方法

    • 在src目录下新建tools文件夹,放置js脚本
    // src/tools/rem.js
    (function(doc, win) {
        var docEl = doc.documentElement,
            resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
            recalc = function() {
                var clientWidth = docEl.clientWidth;
                if (!clientWidth) return;
                docEl.style.fontSize = 20 * (clientWidth / 320) + 'px';
            };
        if (!doc.addEventListener) return;
        win.addEventListener(resizeEvt, recalc, false);
        doc.addEventListener('DOMContentLoaded', recalc, false);
    })(document, window);
    
    // src/tools/http.js
    export default (type='GET', url='', data={}, async=true) => {
        return new Promise((resolve, reject) => { //定义一个promise
            type = type.toUpperCase();
    
            let requestObj;
            if (window.XMLHttpRequest) {
                requestObj = new XMLHttpRequest();
            } else {
                requestObj = new ActiveXObject;
            }
    
            if (type == 'GET') {
                let dataStr = ''; //数据拼接字符串
                Object.keys(data).forEach(key => {
                    dataStr += key + '=' + data[key] + '&';
                })
                dataStr = dataStr.substr(0, dataStr.lastIndexOf('&'));
                url = url + '?' + dataStr;
                requestObj.open(type, url, async);
                requestObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                requestObj.send();
            }else if (type == 'POST') {
                requestObj.open(type, url, async);
                requestObj.setRequestHeader("Content-type", "application/json");
                requestObj.send(JSON.stringify(data));
            }else {
                reject('error type');
            }
    
            requestObj.onreadystatechange = () => {
                if (requestObj.readyState == 4) {
                    if (requestObj.status == 200) {
                        let obj = requestObj.response
                        if (typeof obj !== 'object') {
                            obj = JSON.parse(obj);
                        }
                        resolve(obj);
                    }else {
                        reject(requestObj);
                    }
                }
            }
        })
    }
    

    3.设计路由:

    // src/router/index.js
    import Vue from 'vue'
    import Router from 'vue-router'
    
    // 一级路由
    import App from '../App'
    
    // 二级路由
    import Home from '../pages/home'
    import Item from '../pages/item'
    import Result from '../pages/result'
    
    Vue.use(Router)
    
    export default new Router({
      mode: 'history',
      routes: [
        {
            path: '/',
            name: 'app',
            component: App,
            children: [
                {
                    path: '',
                    component: Home
                },
                {
                    path: '/item',
                    component: Item
                },
                {
                    path: '/result',
                    component: Result
                }
            ]
        }
      ]
    })
    

    4.全局reset

    // src/common/style.less
    body, div, span, header, footer, nav, section, aside, article, ul, dl, dt, dd, li, a, p, h1, h2, h3, h4,h5, i, b, textarea, button, input, select  {
        padding: 0;
        margin: 0;
        list-style: none;
        font-style: normal;
        text-decoration: none;
        border: none;
        color: #313131;
        box-sizing: border-box;
        font-weight: lighter;
        font-family: 'Microsoft YaHei';
        -webkit-tap-highlight-color:transparent;
        &:focus {
            outline: none;
        }
    }
    
    
    html{
        height: 100%;
        width: 100%;
    }
    body{
        height: 100%;
        width: 100%;
        background: url(../images/1-1.jpg) no-repeat;
        background-size: 100% 100%;
    }
    
    .clear:after{
        content: '';
        display: block;
        clear: both;
    }
    
    .clear{
        zoom:1;
    }
    
    .back_img{
        background-repeat: no-repeat;
        background-size: 100% 100%;
    }
    
    .margin{
        margin: 0 auto;
    }
    
    .left{
        float: left;
    }
    
    .right{
        float:right;
    }
    
    .hide{
        display: none;
    }
    
    .show{
        display: block;
    }
    
    

    4.书写页面代码:

    • 从上面的路由设计可以看出,此项目有3个页面:home、item和result
    • 下面分别书写这3个文件代码
    // src/pages/home/index.vue
    
    

    相关文章

      网友评论

          本文标题:vue移动端入门小项目

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