3.Index.vue

91 阅读1分钟

写Index.vue之前需要写ArticleList组件,因为这个有重用的地方,所以当成组件,比如最新文章和最热文章可以用一个组件重用
ArticleList.vue 依然用Iview的组件Card

<template>
  <Card>
    <p slot="title">{{title}}</p>
    <p v-for="item in list" :key="item.id">
        <router-link :to="'/article/'+item.id">
            {{item.title}}
        </router-link>
    
    </p>
  </Card>
</template>

<script>
export default {
    name:'ArticleList',
    data(){
        return{}
    },
    created() {
        
    },
    props:{

        list:Array,
        title:String
    }
    
}
</script> 

index.vue中引入ArticleList.vue,使用的时候,穿两个参数就好了,title,和list.
还需要实现一个轮播图,轮播图也是iview的组件

<template>
    <div>
        <!--轮播图-->
        <Carousel v-model="value2" loop>
            <CarouselItem :key="item.title" v-for="item in pic">
                <div class="demo-carousel">
                    <router-link :to="item.src">
                        <img :src="item.img"/>
                        <div>
                            
                            {{item.title}}
                        </div>
                    </router-link>
                </div>
            </CarouselItem>
        </Carousel>
        <!--文章列表-->
        <div class="article-list">
            <row type="flex" justify="space-around" class="code-row-bg">
                <i-col span="11">
                    <article-list :list="list" :title="listTitle"></article-list>
                </i-col>
                <i-col span="11">
                    <article-list :list="hotList" :title="hotListTitle"></article-list>
                </i-col>
            </row>
        </div>
    </div>
</template>
<script>
    import ArticleList from '../components/ArticleList'

    export default {
        name: 'Home',
        components: {
            ArticleList
        },
        data() {
            return {
                value2: 0,
                pic: [],
                list: [],
                listTitle: '最新文章',
                hotList: [],
                hotListTitle: "最热文章"
            }
        },
        created: function () {
            //获取主页轮播图
            this.$api.get('getIndexPic').then((res) => {
                console.log('轮播图')
                console.log(res.data)
                this.pic = res.data
            })
            //获取所有文章
            this.$api.get('getNewArticle').then((res) => {
                let rData = res.data.slice(0, 5)
                let tData = []
                rData.map((item) => {
                    if (item.id !== 0) {
                        tData.push(item)
                    }
                })
                this.list = tData
            })
            //获得热点文章
            this.$api.get('getHotArticle').then((res) => {
                let rData = res.data.slice(0, 5)
                let tData = []
                rData.map((item) => {
                    if (item.id !== 0) {
                        tData.push(item)
                    }
                })
                this.hotList = tData
            })
        }
    }
</script>

第一是轮播图Carousel,第二个是引入的ArticleList 介绍一下Carousel,

    <Carousel
        v-model="value"
        :autoplay="setting.autoplay"
        :autoplay-speed="setting.autoplaySpeed"
        :dots="setting.dots"
        :radius-dot="setting.radiusDot"
        :trigger="setting.trigger"
        :arrow="setting.arrow">
        <CarouselItem>
            <div class="demo-carousel">1</div>
        </CarouselItem>
        <CarouselItem>
            <div class="demo-carousel">2</div>
        </CarouselItem>
        <CarouselItem>
            <div class="demo-carousel">3</div>
        </CarouselItem>
        <CarouselItem>
            <div class="demo-carousel">4</div>
        </CarouselItem>
    </Carousel>

v-model绑定的值是起始图片的索引,:arrow是切换箭头的显示时机,可选值为 hover(悬停),always(一直显示),never(不显示).trigger触发,click,hover
第二个组件使用了view的组件row:有这么几个属性:type,justify 非 template/render 模式下,需使用 i-col。i-col的属性一般用span:span的值从0-24