UNPKG

@ray-js/router

Version:

Ray Core

74 lines (73 loc) 2.08 kB
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2"; import "core-js/modules/esnext.iterator.constructor.js"; import "core-js/modules/esnext.iterator.for-each.js"; import "core-js/modules/esnext.iterator.some.js"; import { RouterScheduler as IRouterScheduler } from '@ray-js/types'; /** * web 环境下的路由协调器 */ export class RouterScheduler extends IRouterScheduler { $currentRoute = ''; $listeners = {}; $entityMap = []; basename = '/'; /** * 当前调度器的 route 地址 */ get currentRoute() { return this.$currentRoute; } set currentRoute(val) { if (val !== this.currentRoute) { this.$currentRoute = val.replace(/\/$/, ''); this.emit('routeChange', this.currentRoute); } } on(event, fn) { if (!this.$listeners[event]) { this.$listeners[event] = []; } const events = this.$listeners[event]; events.push(fn); return () => { events.splice(events.indexOf(fn), 1); }; } // 给 TabBar 监听,用于处理当前高亮状态 emit(event) { for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } const fns = this.$listeners[event]; if (Array.isArray(fns)) { fns.forEach(fn => { fn(...args); }); } } /** * 初始化路由,注册应用声明的路由,并处理映射关系 */ registryPages(params) { const { pages, tabBar } = params; const tabBarList = (tabBar === null || tabBar === void 0 ? void 0 : tabBar.list) || []; pages.forEach(page => { const isTabBar = tabBarList.some(item => page.path === item.pagePath); page.route = page.route || page.path; page.originalRoute = page.route; this.addPage(_objectSpread(_objectSpread({}, page), {}, { isTabBar })); }); } getMatchedPage(pathname) { this.currentRoute = pathname; return this.matchPageByPathname(pathname); } addPage(page) { this.$entityMap.push(page); } }