在Aurelia路由器中,当用户试图导航到同一页面时,是否可能收到通知?
我可以订阅的中的激发事件。我的代码订阅在Aurelia路由器中,当用户试图导航到同一页面时,是否可能收到通知?,aurelia,Aurelia,我可以订阅的中的激发事件。我的代码订阅路由器:导航:处理事件,以便每当用户单击路由时,我的导航菜单关闭 eventAggregator.subscribe('router:navigation:processing', e => menu.close()); 问题是,当用户位于他们试图导航到的页面上时,菜单保持打开状态。当他们选择当前所在的页面时,我想关闭菜单 我还想提及我的菜单链接如下: <a route-href="route:showcase" class="menu-ite
路由器:导航:处理
事件,以便每当用户单击路由时,我的导航菜单关闭
eventAggregator.subscribe('router:navigation:processing', e => menu.close());
问题是,当用户位于他们试图导航到的页面上时,菜单保持打开状态。当他们选择当前所在的页面时,我想关闭菜单
我还想提及我的菜单链接如下:
<a route-href="route:showcase" class="menu-item">Showcase</a>
如果可能的话,我想保留我的链接,因为我喜欢
aurelia路由器如何自动绑定href
地址。不,没有真正的内置机制<代码>历史浏览器
负责截取锚定标记上的点击事件,并将url片段发送给routeHandler
仅当新片段与旧片段不同时才会执行此操作(或如果导航状态为“替换”);如果没有,则在路由器还未涉及之前,操作就会中止
根据您需要这项服务的频率、值得投资的时间等,您会想到一些选项:
- 在锚标记上添加一个
事件侦听器。单击后,您的检查在注入的click.trigger
:BrowserHistory
。如果计算结果为true,则您位于同一页面上,路由器不会执行任何操作,因此轮到您向EventAggregator发布某些内容history上会有点粗糙(它模仿了框架的功能)。\u getFragment(DefaultLinkHandler.getEventInfo(event.href)==history.fragment
- 或者更简单(但更容易出现问题/边缘情况)的替代方法:注册一个单击事件,该事件只需将
属性与href
或其一些好友进行比较window.location.href
- 使用
(不推荐,因为它会无缘无故地重做整个组件,但这是一个选项)navigationStrategy.replace
- 当
全局执行此操作时,重写发布到EventAggregator(第138行或index.js的某些内容)的this.fragment==fragment
类的BrowserHistory
方法,并将其作为navigate()
向DI注册History
导航到页面链接的自定义元素
导航到page-link.ts
嘿,谢谢你分享你最后做的事。我可能误解了你的限制。您是否只是希望在导航时关闭菜单,而不管您是导航到当前页面还是其他页面?在这种情况下,我会建议比我现在建议的更干净的解决方案:)
import { bindable, autoinject } from 'aurelia-framework';
import { Store } from 'aurelia-store';
import { State } from '@src/state/state';
import { MenuStateActions } from '../menu-state';
@autoinject()
export class NavigateToPageLink{
@bindable route: string;
@bindable name: string;
constructor(private store: Store<State>){}
closeMenu(){
this.store.dispatch(MenuStateActions.close);
return true;
}
}
<template>
<a route-href="route.bind: route" click.delegate="closeMenu()" class="menu-item">${name}</a>
</template>
<require from="./navigate-to-page-link"></require>
<navigate-to-page-link route="home" name="Home"></navigate-to-page-link>