"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Navigator = void 0; const assert_1 = require("oak-domain/lib/utils/assert"); const navigator_common_1 = require("./navigator.common"); class Navigator extends navigator_common_1.Navigator { history; constructor() { super(); this.history = wx; } getLocation() { //初始化的时候 const pages = getCurrentPages(); //获取加载的页面 const currentPage = pages[pages.length - 1]; //获取当前页面的对象 const route = currentPage?.route; //当前页面url const options = currentPage?.options; //如果要获取url中所带的参数可以查看options const pathname = route ? route .replace('/pages', '') .replace('pages', '') .replace('/index', '') : ''; let search = ''; for (const k in options) { if (search) { search += '&'; } search += `${k}=${typeof options[k] === 'string' ? options[k] : JSON.stringify(options[k])}`; } const url = pathname.replace(this.namespace, '').replace('//', '/'); return { pathname: pathname, state: options, key: `${pages.length - 1}`, namespace: this.namespace, search, url: url || '/', }; } getState() { const { pathname, state } = this.getLocation(); const state2 = this.constructState(pathname, state); return state2; } getPathname(pathname, namespace) { if (!/^\/{1}/.test(pathname)) { (0, assert_1.assert)(false, 'url前面必须以/开头'); } // 格式:/house/list 前面加上/pages 后面加上/index if (pathname?.indexOf('pages') !== -1 || pathname?.lastIndexOf('index') !== -1) { (0, assert_1.assert)(false, 'url两边不需要加上/pages和/index'); } let pathname2 = pathname; if (namespace) { const pathname3 = this.constructNamespace(pathname, namespace); pathname2 = `/pages${pathname3}/index`; return pathname2; } return `/pages${pathname2}/index`; } getUrlAndProps(options, state, disableNamespace) { const { url, ...rest } = options; const { pathname } = this.getLocation(); const state2 = Object.assign({}, rest, state, { oakFrom: pathname, }); const url2 = this.constructUrl(url, state2, disableNamespace); return { url: url2, }; } navigateTo(options, state, disableNamespace) { if (!this.enter()) { return; } const { url } = this.getUrlAndProps(options, state, disableNamespace); return new Promise((resolve, reject) => { wx.navigateTo({ url: url, success: () => { this.publish(); resolve(undefined); }, fail: (err) => reject(err), }); this.publish(); this.leave(); }); } // 关闭当前页面,跳转到应用内的某个页面,但不允许跳转到tabBar页面。 redirectTo(options, state, disableNamespace) { if (!this.enter()) { return; } const { url } = this.getUrlAndProps(options, state, disableNamespace); return new Promise((resolve, reject) => { wx.redirectTo({ url: url, success: () => { resolve(undefined); this.publish(); }, fail: (err) => reject(err), }); this.leave(); }); } //跳转到tabBar页面,并关闭其他所有非tabBar页面,用于跳转到主页。 switchTab(options, state, disableNamespace) { if (!this.enter()) { return; } const { url } = this.getUrlAndProps(options, state, disableNamespace); return new Promise((resolve, reject) => { wx.switchTab({ url: url, success: () => { resolve(undefined); this.publish(); }, fail: (err) => reject(err), }); this.leave(); }); } navigateBack(delta) { if (!this.enter()) { return; } return new Promise((resolve, reject) => { wx.navigateBack({ delta: delta || 1, success: () => { resolve(undefined); this.publish(); }, fail: (err) => reject(err), }); this.leave(); }); } navigateBackOrRedirectTo(options, state, disableNamespace) { if (!this.enter()) { return; } const pages = getCurrentPages(); if (pages.length > 1) { this.leave(); return this.navigateBack(); } const isTabBar = options?.isTabBar; if (isTabBar) { this.leave(); return this.switchTab(options, state, disableNamespace); } this.leave(); return this.redirectTo(options, state, disableNamespace); } } exports.Navigator = Navigator;