美文网首页
微信小程序:一个实现方法重载的思路

微信小程序:一个实现方法重载的思路

作者: like26th | 来源:发表于2020-03-07 19:29 被阅读0次

    根据UI设计,在项目中使用了自定义的导航栏。导航栏有三部分,中间的标题,左边的返回按钮,右边的其他功能按钮。

    一般情况下,点击返回按钮返回上一个页面,直接调用wx.navigateBack()即可。但是我们的业务中,有一个修改密码功能,需要在一个页面中请求验证码,验证成功后进入到设置新密码页面,设置成功后再回到登录页面。

    而在小程序的页面栈管理框架中实现起来却遇到了一点问题,在设置密码成功后,使用后退或者重定向,都无法很好的在后台销毁请求验证码页面(由于我们在登录页面前还有一个页面,也无法使用reLaunch方式)。

    所以最后我只能把请求验证码和设置密码功能写在一个页面中,通过布局的显示和隐藏进行切换。那么接下来就要处理一个问题,在这个页面中,点击返回键,有时要回到上一个页面,有时要切换布局。

    而为了方便维护,我的自定义导航栏是必须是全局的,那么它的返回方法除了wx.navigateBack(),还必须提供可重载的能力,方便调用的页面自定义实现。

    小程序的页面和数据的交互基本都是通过设置data中的值实现的,那么可以这样设计,在自定义导航栏中,将返回方法提取到data中。

    //自定义导航栏 page/js
    data:{
         /**
         * 左上角按钮回退方法,可以被调用者重写
         */
        goBack:function(){
          wx.navigateBack()
        }
    },
    
    methods:{
       /**
         * 调用者设置新的返回方法
         */
        setGoBack: function (_goback){
          this.setData({ goBack : _goback})
        },
    
        /**
         * 返回上一页
         */
        goBack: function(){ 
          this.data.goBack()
        },
    }
    

    在自定义导航栏中的view绑定了goBack方法。这样一般情况下,点击返回按钮直接调用data中的boBack方法,返回到上一个页面。在设置密码页面中

    //获取自定义导航栏对象
    let titlelayout = this.selectComponent('#titlelayout');
    
     //重写titleLayout左键返回方法,切换布局,或返回上一页
    titlelayout.setGoBack(function(){
        if(_this.data.step == 2) {
            _this.setData({ step: '1' })
       } else {
            wx.navigateBack()
       }
    });
    

    其中根据step的数值判断布局的显示和隐藏。这样返回方法可以在不同页面,有不同的实现。

    相关文章

      网友评论

          本文标题:微信小程序:一个实现方法重载的思路

          本文链接:https://www.haomeiwen.com/subject/ogjhdhtx.html