历史记录

单页路由里面有一个 router.history 而多页没有, 为了方便管理组件, 1.6.0以后都使用 bui.history 来获取历史记录. 多页的历史记录只会有一个.

获取所有历史记录

** bui.history.get **

  1. // 获取所有, 返回数组
  2. var allHistory = bui.history.get();
  3. // 通过模块名获取某个历史记录, 返回对象
  4. var main = bui.history.get("main");

获取最后的记录

** bui.history.getLast **

  1. // 获取所有, 返回对象
  2. var lastHistory = bui.history.getLast();
  3. // 获取最后的页面的实例, exports 是需要模块抛出才会有.
  4. var currentDistance = bui.history.getLast("exports");

获取上一个页面的记录

如果还没有这个,需要更新 bui.js

** bui.history.getPrev **

  1. // 获取上一个页面
  2. var prevHistory = bui.history.getPrev();
  3. // 获取上一个页面的实例, exports 是需要模块抛出才会有.
  4. var prevDistance = bui.history.getPrev("exports");

获取组件的实例

** bui.history.getComponent **

  1. // 可以拿到list实例抛出的方法
  2. var listDistance = bui.history.getComponent("list");;
  1. <component id="list" name="pages/components/list/index"></component>

pages/components/list/index.js

  1. loader.define(function(){
  2. var uiList = bui.list({
  3. id:"",
  4. url:""
  5. })
  6. return uiList;
  7. })

获取传参

** bui.history.getParams **

  1. // 方法1: 如果不确定该模块会被哪种方式使用, 则可以使用这种方式获取. module.id 在loader.define(function(req,ext,module){ }) 的第三个参数
  2. var params = bui.history.getParams(module.id);
  3. // 方法2: 获取单页路由或者多页路由的跳转传参 bui.load({url:"",param:{}})
  4. var params = bui.history.getParams("url");
  5. // 方法3: 获取以bui.page({url:"",param:{}}) 加载的的参数, 通过以下方式获取
  6. var pageParams = bui.history.getParams("page");
  7. // 方法4: 获取以router.loadPart, loader.load , component标签 加载的的参数, 通过以下方式获取
  8. var partParams = bui.history.getParams("component");

获取弹窗组件的实例

** bui.history.getPage **

通过 bui.page 加载的模块,使用这个方式获取 例如:

  1. bui.page({
  2. url:"pages/login/login.html"
  3. })
  1. // 可以拿到login实例抛出的方法
  2. var login = bui.history.getPage("pages/login/login");;

pages/login/login.js

  1. loader.define(function(require,export,module){
  2. var form = {
  3. init: function(){
  4. console.log("login init")
  5. }
  6. }
  7. // 执行
  8. form.init();
  9. return form;
  10. })

内部获取弹窗的实例

pages/login/login.js

  1. loader.define(function(require,export,module){
  2. var form = {
  3. init: function(){
  4. // 内部可以拿到 module.id 来获取弹窗, 进行弹窗的操作.
  5. var dialog = bui.history.getPageDialog(module.id);
  6. // 关闭操作
  7. // dialog.close();
  8. console.log(dialog)
  9. }
  10. }
  11. // 执行
  12. form.init();
  13. return form;
  14. })

检测页面是否已经加载

** bui.history.check **

  1. var isLogin = bui.history.check("pages/login/login.html");

检测component是否已经加载

** bui.history.checkComponent **

  1. <component id="tab1" name="pages/components/list/index"></component>
  2. // tab1 为 component 标签的id
  3. var isLoaded = bui.history.check("tab1");

检测component是否已经加载

** bui.history.checkPage **

  1. // tab1 为 id
  2. var isLoaded = bui.history.checkPage("tab1");

页面刷新

bui.refreshbui.history.refresh 都可以.

  • 1.6.x 以下不建议使用页面刷新, 不熟悉事件操作会造成事件重复绑定. 可以结合 loader.require 调用模块抛出的方法, 实现局部刷新功能.

** bui.history.refresh **

  1. bui.history.refresh();
  2. bui.refresh();