建议在 Page 的 this 作用域中把 __router__ 显性暴露出来
发布于 6 年前 作者 dwang 3537 次浏览 来自 问答

原因: 在 Page 的控制逻辑中,非常需要知道当前的 Page 属于哪个路径,以便于代码复用。

现在的办法是,使用隐形的 this.__router__

但这总不是个办法吧。

建议在 Page 的 this 作用域中把 __router__ 显性暴露出来

5 回复

// pages/login/login.js

const route = pages/login/login.js

Page({

// you code here

  onShow: () => {

     console.log(route)

}

})

你自己的代码是可以知道当前是哪个route的呀

更新的1.2.0版本已经可以使用 page 的 route 字段获取当前页面的路径了

__router__ 这个私有变量在可预见的未来都是不会删除的,可以正常使用

不过使用没有暴露在文档中的变量确实不好,我们会考虑直接直接暴露出 router 变量,并且在文档中标明

我们现在就是用您的这个方法做的,但是 这样很低效。

目前这样做的原因是担心 __router__ 这个隐形属性不可依赖。

__
__

因为有30多个form page,我们需要实现的是保存(save) 并恢复(restore) 用户在 form page 上的输入。

那么 page router 是一个非常合适的 storage key。

再往深里看

这些 form pages 的 save / restore / input validation 都是大量重复的逻辑。因此一个更合理的模型是使用助手方法抽取掉大量重复的逻辑。 而 Page 的 onHide / onShow / onLoad / onUnload 正好完美的把助手方法生产的方法实例绑定到当前的 page 作用域上。

因此 我觉得 让 Page 能够在自己的作用域下自我识别是有很大好处的。

回到顶部