vue移动端项目经验(三)

登录成功后跳转回上一页而非主页

评论页:
sendComment(){
    axios.get(`${common.commentapi}/comment?aid=${this.aid}`).then(res=>{
        if(res.data.code==200){
            this.$toast({
                message:'收藏成功',
                duration:2000,	
            })
        }else if(res.data.code==401){
            Dialog.confirm({
                message: '登录后才能收藏哦',
                confirmButtonText: "去登录",
                cancelButtonText: "下次吧"
            }).then(()=>{
                this.$router.replace({    //将当前页面路由替换成登录页路由,并将当前页面路由保存在query中为后面跳转回来做准备
                    path:"/user/login",
                    query: {redirect: this.$router.currentRoute.fullPath}
                })
            }).catch(()=>{})
        }
    })
}

登录页:
login(){
    axios.post(`${common.userapi}/login`,params).then(res=>{
        if(res.data.code==200){
            this.$toast({
                message:'登录成功',
                duration:2000,	
            })
            if(this.$route.query.redirect){  //判断若是路由中保存了上一页的路由信息,则执行以下代码跳转回上一页。这里注意route与router的区别使用
                this.$router.replace({path:decodeURIComponent(this.$route.query.redirect)})  //这里为什么用replace不用push?因为直接替换路由不会产生新的history记录。以防止产生新的history记录导致相关页面的router.go(-1)出现问题
            }else{
                this.$router.push('/')  //否则则跳往首页
            }
        }
    })
}

数据轮询,使用定时器每过60秒请求一次数据

data(){
    return{
        setTimeGet:null  //轮询定时器
    }
},
created(){
    this.getData()   //初始化页面时执行函数(不设的话,则初始时不执行定时器,在60000ms后开始执行)
},
beforeDestroy() {   //关闭页面之前清除定时器
    clearInterval(this.setTimeGet)  
},
//若该页面使用了keepAlive缓存,则beforeDestroy生命周期不可用,改为deactivated生命周期
//deactivated(){
//    clearInterval(this.setTimeGet)  
//},
methods:{
    getData(){
        axios.get(`${common.demoapi}/getdemo?id=${this.rid}`).then(res=>{  //初始化页面时请求一次
            if(res.data.code==200){
                ......
            }
        })
        this.setTimeGet=setInterval(()=>{   //设置定时器,继第一次请求之后,每60秒轮询一次
            axios.get(`${common.demoapi}/getdemo?id=${this.rid}`).then(res=>{
                if(res.data.code==200){
                    ......
                }
            })
        },60000)
    },  
}

获取验证码

getVerifyCode(){
    this.verifyImg=`${common.base}/getVerification?t=${Math.random()}`
}

router路由在新窗口打开页面

goIndex(){
    let goIndex=this.$router.resolve({name:'Index'})   //这里要用resolve方式。 push,go方式无效
    window.open(goIndex.href,'_blank')
}

银行卡号每四位空格显示

银行卡号正则:
if(/^([1-9]{1})(\d{11}|\d{15}|\d{16}|\d{17}|\d{18})$/.test(this.cardId)==false){
    this.$toast('请检查您的银行卡号是否正确')
    return
}
使用slice或substr或substring分割达到每4位一个空格效果:
<div class="cardId"><span>银行卡号:</span><span>{{`${item.bankcardid.slice(0,4)} ${item.bankcardid.slice(4,8)} ${item.bankcardid.slice(8,12)} ${item.bankcardid.slice(12,16)} ${item.bankcardid.slice(16,20)}`}}</span></div>

substr,substring,slice的区别

https://blog.csdn.net/qq_38047742/article/details/82144266

axios设置请求头

zfbpay(){
    let config={   //配置请求头
        headers:{
            "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
        }
    }
    let params=new URLSearchParams()
    params.append('money',this.moneyAmount)
    params.append('ispc',2)
    this.$axios.post(`${common.orderApi}/amstc/userRechargeAccountByAliPay`,params,config).then(res=>{
        if(res.data.code==200){
            let divbody=document.createElement('div')
            divbody.innerHTML=res.data.data
            document.body.appendChild(divbody)
            document.forms[0].submit()
        }
    }).catch(err=>{})
},

判断是否是微信

isWechat() {
    let ua = navigator.userAgent.toLowerCase();
    if (ua.match(/MicroMessenger/i) == "micromessenger") {
        this.iswx = true
    } else {
        this.iswx = false;
    }
}

判断是否是ios

iosCheck(){
    let u = navigator.userAgent;
    if (!!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/)) {
        this.isIos=true
    }else{
        this.isIos=false
    }
},

移动端下载文件功能

注:移动端下载文件功能在微信内置浏览器中不可用,需要先判断网页是否在微信中打开,判断方法如上
download(url){
    window.location.href=url
}

全局部署404(在router/index.js添加)

import NotFound from '@/pages/notFound/notFound'   //404

export default new Router({
    mode: 'history',  //去掉url中的#
    routes: [
        {
            path: '/',
            name: 'Index',
            component: Index,
            meta:{title:'首页'}
        },
        。。。
        {                     //在路由最末尾部署,记住要在最末尾
            path:'/notFound',
            name:'NotFound',
            component:NotFound,
            meta:{
                title:'页面不存在'
            }
        },
        {
            path:'*',
            redirect:'/notFound',
        }
    ]

vue获取上一页路由和当前页路由

beforeRouteEnter(to, from, next) {
    next(()=>{          
        console.log(from)   //上一页路由信息
        console.log(to)   //当前页路由信息
    })
},

input框ios端去除输入法首字母大写状态

<input type="text" autocapitalize="off" autocorrect="off" />

微信分享后返回上一页(有上一页则返回上一页,没有则返回首页)

goBack(){
    if(window.history?.state?.back){
        this.$router.back()
    }else{
        this.$router.push('/')
    }
},
posted @ 2019-11-05 13:38  huihuihero  阅读(506)  评论(0编辑  收藏  举报