关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

Vue webAPP首页开发(一)

发布时间:2020-04-02 00:00:00

接上篇 https://www.cnblogs.com/chenyingying0/p/12609330.html

 

首先说下格式化的问题:

vscode可以安装Vetur插件

 

 安装之后重启编辑器,鼠标右键,有一个格式化代码选项,点击即可

 

首先放出文件路径,先让小伙伴们熟悉下结构

 

 

Navbar 组件:

在base目录下创建navbar目录,里面创建index.vue

<div class="mine-navbar-left" v-if="$slots.left"><div class="mine-navbar-center" v-if="$slots.center">

<div class="mine-navbar-right" v-if="$slots.right"><h1 class="mine-navbar-title" v-if="title">

首页home目录下的header.vue

搜索框import MeNavbar from 'base/navbar';
export default {
   name:"HomeHeader",
   components:{
       MeNavbar
   }
}" _ue_custom_node_="true">// 引入前面需要加波浪线,否则会报错@import "~assets/scss/mixins";
    .header{&.mine-navbar{
            background:transparent;
        }

        .iconfont{
            font-size:$icon-font-size;
            color:$icon-color-default;
        }
    }    
" _ue_custom_node_="true">

在_mixins.scss中新增flex-between

 

 现在的效果:

 

 

幻灯片组件--swiper:https://www.npmjs.com/package/vue-awesome-swiper

首先下载 cnpm install swiper vue-awesome-swiper --save

 

 

模拟服务器端提供的数据 http://www.imooc.com/api/home/slider

 

 

因为要使用ajax发送请求,因此需要安装axios  

cnpm install --save axios

 

 

在api目录下创建config.js,用来存放常量

export const SUCC_CODE=0;
export const TIMEOUT=10000;

 

在api目录下创建home.js,用来使用axios模拟从服务器获取slider数据

import axios from 'axios';
import {SUCC_CODE,TIMEOUT} from './config';//获取幻灯片数据 ajaxexport const getHomeSliders=()=>{// es6使用promise代替回调// axios返回的就是一个promise// return axios.get('http://www.imooc.com/api/home/slider').then(res=>{//     console.log(res);//     if(res.data.code===SUCC_CODE){//         return res.data.slider;//     }//     throw new Error('没有成功获取到数据');// }).catch(err=>{//     console.log(err);//     //错误处理//     return [{       //         linkUrl:'www.baidu.com',//         picUrl:require('assets/img/404.png')//     }]// });//演示超时错误return axios.get('http://www.imooc.com/api/home/slider',{
        timeout:TIMEOUT
    }).then(res=>{
        console.log(res);if(res.data.code===SUCC_CODE){return res.data.slider;
        }throw new Error('没有成功获取到数据');
    }).catch(err=>{
        console.log(err);//错误处理return [{       
            linkUrl:'www.baidu.com',
            picUrl:require('assets/img/404.png')
        }]
    });
}

 

在base目录下创建slider目录,里面创建index.vue,这是基础的slider组件样式(可多个项目通用)

<div class="swiper-pagination" v-if="pagination" slot="pagination">

 

在main.js中引入swiper的css文件

 

 

把图片复制到home目录下,然后创建slider.vue,这是首页中的slider组件

<MeSlider 
            :direction="direction":loop="loop":interval="interval":pagination="pagination"v-if="sliders.length"
        ><swiper-slide v-for="(item,index) in sliders" :key="index">import MeSlider from 'base/slider';
import { SwiperSlide } from 'vue-awesome-swiper';
import { sliderOptions } from './config';
import { getHomeSliders } from 'api/home';

export default {
   name:"HomeSlider",
   components:{
       MeSlider,
       SwiperSlide
   },
    data(){return{
            direction:sliderOptions.direction,
            loop:sliderOptions.loop,
            interval:sliderOptions.interval,
            pagination:sliderOptions.pagination,
            sliders:[],//这是从服务器读取//这是静态写入// sliders:[//     {//        linkUrl:'www.baidu.com',//        picUrl:require('./1.jpg') //js中本地图片引入必须加require//     },//     {//        linkUrl:'www.baidu.com',//        picUrl:require('./2.jpg') //     },//     {//        linkUrl:'www.baidu.com',//        picUrl:require('./3.jpg') //     },//     {//        linkUrl:'www.baidu.com',//        picUrl:require('./4.jpg') //     }// ]        }
    },
    created(){//一般在created里获取远程数据this.getSliders();
        
        
    },
    methods:{
        getSliders(){
            getHomeSliders().then(data=>{
                console.log(data);this.sliders=data;
            });
        }
    }
}" _ue_custom_node_="true">// 引入前面需要加波浪线,否则会报错@import "~assets/scss/mixins";
    .slider-wrapper{
        width:100%;
        height:183px;
    }
    .slider-link{
        display:block;
    }
    .slider-link,
    .slider-img{
        width:100%;
        height:100%;
    }    
" _ue_custom_node_="true">

 

修改home目录下的index.vue,现在首页已经引入了头部,轮播图,底部,返回箭头

import HomeHeader from './header';
import HomeSlider from './slider';

export default {
    name:"Home",
    components:{
        HomeHeader,
        HomeSlider
    }
}" _ue_custom_node_="true">// 引入前面需要加波浪线,否则会报错@import "~assets/scss/mixins";
    .home{
        overflow:hidden;
        width:100%;
        height:100%;
        background:$bgc-theme;
    }" _ue_custom_node_="true">

 

在home目录下新建config.js,配置首页中的轮播图的配置参数

//暴露一个常量export const sliderOptions={
    direction:"horizontal",
    loop:"loop",
    interval:1000,
    pagination:"pagination"}

 

修改下_container.scss,增加一些样式

@import "mixins";

.g-container{position: relative;width:100%;height:100%;max-width:640px;min-width:320px;margin:0 auto;overflow:hidden;
}.g-view-container{height:100%;padding-bottom:$tabbar-height; // 注意移动端在reset文件里要设置box-sizing:border-box}.g-header-container{position:absolute;left:0;top:0;width:100%;z-index:$navbar-z-index;
}.g-footer-container{position:absolute;left:0;bottom:0;width:100%;box-shadow:0 0 10px 0 hsla(0,6%,58%,0.6);z-index:$tabbar-z-index;
}.g-backup-container{position: absolute;z-index:$backtop-z-index;right:10px;bottom:$tabbar-z-index+10px;
}

 

index.scss里的代码:

@charset "UTF-8";

@import "reset";
@import "base";
@import "icons"; // 引入时不需要写_icons.scss
@import "containers";
@import "tabbar";

 

成功获取轮播图时的效果

 

获取轮播图失败的效果图

 


/template/Home/Zkeys/PC/Static