老师,为什么我点击tab的时候,content的切换很奇怪

老师,为什么我点击tab的时候,content的切换很奇怪

我在男装页面点击女装页面的时候,loading遮挡层出现之后,会先闪现男装的页面,再变成女装页面,这要怎么办??

<template>

    <div class="content-wrapper">

        <div class="loading-container" v-if="isLoading">

            <div class="loading-wrapper">

                <me-loading class="mine-loading"></me-loading>

            </div>

        </div>

        <me-scroll ref="scroll">

            <div class="content">

                <div class="pic" v-if="content.banner">

                    <a class="pic-link" :href="content.banner.linkUrl">

                        <img @load="updataScroll" class="pic-img" :src="content.banner.picUrl" alt="">

                    </a>

                </div>

                <div class="section" v-for="(section, index) in content.data" :key="index">

                    <h4 class="section-title">{{section.name}}</h4>

                    <ul class="section-list" >

                        <li class="section-item" v-for="(item, i) in section.itemList" :key="i">

                            <a class="section-link" :href="item.linkUrl">

                                <img class="section-pic" v-lazy="item.picUrl" :alt="item.name">

                            </a>

                        </li>

                    </ul>

                </div>

            </div> 

        </me-scroll>

    </div>  

</template>


<script>

import MeLoading from 'base/loading'

import MeScroll from 'base/scroll'

import {getCategoryComtent} from 'api/category.js'


export default {

    name: 'CategoryContent',

    data(){

        return {

            content: {},

            isLoading: true

        }

    },

    props: {

        getId: {

            type: String,

            default: ''

        }

    },

    watch: {

        getId(id) {

            this.isLoading = true

            this.getContent(id).then(() => {

                this.updataScroll()

                this.isLoading = false

            })

        }

    },

    methods: {

        getContent(id) {

            return getCategoryComtent(id).then(data => {

                this.content = data.content

            })

        },

        updataScroll() {

            this.$refs.scroll && this.$refs.scroll.updateScroll()

        }

    },

    components: {

        MeLoading,

        MeScroll

    }

}

</script>

<style lang="scss" scoped>

@import '~assets/scss/mixins';


    .content-wrapper {

        position: relative;

        height: 100%;

    }


    .loading-container {

        width: 100%;

        height: 100%;

        @include flex-center;

        z-index: $category-popup-z-index;

    }


    .loading-wrapper {

        width: 50%;

        height: 20%;

        border-radius: 10%;

        background-color: gray;

        opacity: 0.4;

    }


    .mine-loading {

      color: #fff;

      font-size: 14px;

    }


    .content {

        padding: 10px;

    }


    .pic {

        margin-bottom: 12px;

        &-link {

            width: 100%;

        }

        &-img {

            width: 100%;

        }

    }


    .section {

        margin-bottom: 12px;


        &:last-child {

            margin-bottom: 0px;

        }


        &-title {

            height: 28px;

            line-height: 28px;

            color: #080808;

            font-weight: bold;

        }


        &-list {

            display: flex;

            flex-wrap: wrap;

            background-color: #fff;

            padding: 10px 10px 0;

        }


        &-item {

            width: (100% / 3);

        }


        &-link {

            width: 100%;

        }


        &-pic {

            width: 100%;

        }

    }

</style>


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,是的,这是因为loading的原因(因为同学写的方法名和类名等与源码不一致,老师这里将其修改为了源码的方法名),同学可以先把loading效果全关掉:

http://img1.sycdn.imooc.com//climg/5e7b4dfa093e892405120470.jpg

就不会这样了。这是因为在男装页面显示时,数据已经加载成功,当切换到女装页面时,会先显示loading,当loading效果结束后,此时女装的数据还未加载出来,不能覆盖男装的数据,就会先显示下男装的数据,再显示女装的,视频老师也有这样的问题,同学可以仔细看下视频的12分37秒左右,由热门推荐切换慕淘超市,也会先显示下热门推荐的内容:

http://img1.sycdn.imooc.com//climg/5e7b4ede091674cb03590396.jpg

所以同学现在的代码是没有问题的,同学可以再往后学,设置完本地存储应该就没问题了。

祝学习愉快~

好帮手慕粉 2020-03-24 13:50:21

同学你好,在点击了男装以后,再点女装,会先显示男装的页面,是因为发生请求获取响应时,先响应的男装的页面,在点击女装后,女装页面的信息还没来的及返回。同学可以先往下听,视频老师会给解决方法:

https://class.imooc.com/lesson/827#mid=20549

祝学习愉快~

  • 提问者 Syrena3447375 #1
    老师,我觉得不是取消前一次请求的问题,我是很长时间以后点击其他tab,都会先闪现之前的content,然后我听了下面的课,在category.js里添加了取消上一次请求的操作,取消上一次请求成功了也还是会闪现之前的content内容
    2020-03-25 14:23:12
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师