Skip to content

一、vue

1、vue路由中keep-alive不缓存在实际上,他并没有删除DOM,只是 隐藏了DOM,所以在有些操作的时候,会影响页面的实现逻辑;

2、watch无法监听props传值的问题;

3、数据绑定中内层数据改变页面视图不产生变化;

4、vue不适合混合开发,他对混合开发十分不友好,优点 简单;

5、在vue中ios回传给一个true的时候,他会undefind;

**注:

二、vantUI

1、使用vantUI的Tab 标签页 在切换页面的时候,保持高度的问题; 同时他的样式风格,下横杠在ios上有位置不准确的问题;

2、list下拉上拉在初次加载的时候,具有两次请求的问题,你需要else一下,代码如下:

javascript
<!--
 * @Author: 
 * @Date: 2020-12-21 13:55:21
 * @LastEditors: 
 * @LastEditTime: 2021-01-12 16:36:51
 * @FilePath:
 * @Description: 
 参考的博客:https://www.cnblogs.com/hubufen/p/11677146.html
 在外面 要修改这个 里面的属性,或者方法
-->
<template>
    <div>
        <van-pull-refresh v-model="refreshing" @refresh="onRefresh" :disabled="disabled">
            <!-- 刷新 里面 只有一个div,给它 这个 是为了 让其实现 点击没有内容的 时候 也可以下拉更新 -->
            <van-list v-model="loading" :finished="finished" :finished-text="finishedText" @load="onLoad" style="min-height: 100vh;" :immediate-check="false">
                <!-- 这个 里面放置  你的列表 -->
                <slot></slot>
            </van-list>
        </van-pull-refresh>
    </div>
</template>
<script>
export default {
    props:{
        disabled:{
            type:Boolean,
            default() {
                return false
            }
        },
        finishedText:{
            type:String,
            default() {
                return "没有更多了"
            }
        }
    },
    data() {
        return {
            refreshing: false, //下拉刷新: v-model 是否处于加载中状态(加载完成后 把它重置为false,也就是 下拉的时候 它为true)
            loading: false, //v-model  是否处于加载状态,加载过程中不触发load事件
            finished: false, // finished  是否已加载完成,加载完成后不再触发load事件(也就是  所有数据已经加载的时候,把他重置为true)
        };
    },
    methods: {
        /**
         * 下拉刷新
         */
        onRefresh() {
            // console.log('我是下拉刷新');
            // 清空列表数据
            this.finished = false;
            
            // 重新加载数据
            // 将 loading 设置为 true,表示处于加载状态
            this.loading = true;
            this.onLoad();
        },
        /**
         * @description: 上拉加载更多
         */
        onLoad() {
            if (this.refreshing) {//下拉的时候 他是true
                // this.list = [];
                //1、向外 抛出一个函数,清空List(也就是 下拉刷新);
                this.$emit("emptyList");
                //1-1、 这个 要在外面 进行refreshing 重置为false
                // this.refreshing = false;
            }else {
                this.$emit("requestList");
            }
            //2、请求数据(当:immediate-check="true的时候,在组件 初始化的时候,就会去 取的数据")
            //this.$emit("requestList");
            //3、请求完数据 把loading重置为false
            // this.loading = false;
            // 4、当下拉到最后一页的时候
            // this.finished = true;
        }
    },
}
</script>
<style scoped>
</style>

3、并且vantUI布局的样式复杂难以修改;

4、vantUI日期组件的骚操作(已解决)

javascript
<template>
    <div class="time_box">
        <div class="start" @click="stateShow = true">
            <span>{{ stateDate ? stateDate : "请选择起始日期" }} </span> <img src="@/assets/images/bottom.png" alt="">
        </div>
        <van-calendar v-model="stateShow" @confirm="stateConfirm" :min-date="stateMinDate" :max-date="stateMaxDate" :default-date="defaultDate" ref="startComponent" @open="startOpen" />
        <div class="end" @click="endShow = true">
            <span>{{ endDate ? endDate : "请选择截止日期"}}</span> <img src="@/assets/images/bottom.png" alt="">
        </div>
        <van-calendar v-model="endShow" @confirm="endConfirm" :min-date="endMinDate" :max-date="endMaxDate" ref="endComponent" @open="endOpen" :default-date="defaultEndDate" />
    </div>
</template>
<script>
export default {
    data() {
        return {
            stateDate: "",
            stateShow: false,
            stateMinDate: new Date(2010, 0, 1),
            stateMaxDate: new Date(new Date(new Date().toLocaleDateString()).getTime() + 24 * 60 * 60 * 1000 - 1),
            defaultDate: new Date(),//默认时间(取得当前时间的前七天)
            defaultEndDate: new Date(new Date(new Date().toLocaleDateString()).getTime() + 24 * 60 * 60 * 1000 - 1), //给当前日期的默认时间(也就是结束的默认时间)
            endDate: "",
            endShow: false,
            endMinDate: new Date(2010, 0, 1),
            endMaxDate: new Date(new Date(new Date().toLocaleDateString()).getTime() + 24 * 60 * 60 * 1000 - 1)
        }
    },
    created() {
        this.initial();
    },
    methods: {
        initial() {
            this.defaultDate = new Date(new Date(new Date(new Date().toLocaleDateString()).getTime()) - 86400 * 7 * 1000);
            this.endMinDate = this.defaultDate;//这个是 规定了结束时间的最大值
            this.stateDate = this.formatDate(this.defaultDate);
            this.endDate = this.formatDate(new Date());
            this.$emit("state", this.defaultDate);
            this.$emit("end", this.defaultEndDate);
        },
        /**
         * @description: 时间格式转化
         * @param {type} 中国标准时间
         * @return {type}  年 - 月 - 日
         */
        formatDate(date) {
            return `${date.getFullYear()} - ${date.getMonth() + 1} - ${date.getDate()}`;
        },
        /**
         * =在这块 对外暴露,暴露出去的是中国标准时间
         */
        stateConfirm(date) {
            this.stateShow = false;
            this.stateDate = this.formatDate(date);
            this.endMinDate = date;
            this.defaultDate = date;
            this.$emit("state", date);
        },
        endConfirm(date) {
            this.endShow = false;
            this.endDate = this.formatDate(date);
            this.stateMaxDate = date;
            this.defaultEndDate = date;
            this.$emit("end", date);
        },
        startOpen() {
            this.$refs.startComponent.reset();
        },
        endOpen() {
            this.$refs.endComponent.reset();
        },
        /**
         * @description: 重置的 方法
         */
        reset() {
            this.initial();
            this.$refs.startComponent.reset();
            this.$refs.endComponent.reset();
        }
    }
}
</script>
<style scoped>
.time_box {
    display: flex;
    justify-content: space-between;
}
.start,
.end {
    font-size: 28px;
    font-weight: 400;
    color: #999999;
    background: #f6f6f6;
    border: 1px solid #f5f5f5;
    border-radius: 8px;
    padding: 25px 20px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    width: 42%;
}
img {
    width: 21px;
    height: 12px;
}
/* dui UI组件 样式的修改 */
.time_box >>> .van-calendar__selected-day {
    width: 60px;
    height: 60px;
    color: #fff;
    background-color: #fa5000;
    border-radius: 50%;
}
.time_box >>> .van-button--danger {
    background: linear-gradient(135deg, #ff6a23, #f84128);
    box-shadow: 0px 4px 9px 1px rgba(248, 65, 40, 0.3);
    border-radius: 36px;
    border: 0;
}
.time_box >>> .van-calendar__header-title {
    color: black;
}
</style>

四、vue中keep-alive的使用

1、给当前页面设置了keep-alive,他再次进入的时候,created、moutend等不执行;

2、但是再次进入的时候,会执行activated,但是执行created的时候,不会执行它;

3、离开页面的时候,会执行deactivated;

基于 MIT 许可发布