ember.js - 在 Octane 中向 LinkTo 添加额外操作
问题描述
我有一个带有链接的下拉菜单,当单击链接时,我希望关闭菜单。
类似(a11y/i18n 被截断):
<ul class="menu">
<li>
<LinkTo @route="myprofile">
Profile
</LinkTo>
</li>
<li>
<LinkTo @route="logout">
Logout
</LinkTo>
</li>
</ul>
我想在链接中添加一个额外的点击处理程序,例如:
<ul class="menu">
<li>
<LinkTo @route="myprofile" {{on "click" this.closeMenu}}>
Profile
</LinkTo>
</li>
<li>
<LinkTo @route="logout" {{on "click" this.closeMenu}}>
Logout
</LinkTo>
</li>
</ul>
然而,这使得它LinkTo
毫无用处,因为它重新加载页面就像跟随一个链接而不是转换到一个新的路线。我们目前正在使用hember-link-action执行此操作,但我很想找到一种更惯用的方法来解决这个问题。
解决方案
如果你需要执行额外的逻辑,你可以在一个动作中实现重定向而不是使用LinkTo
助手。为此,您需要注入RouterService
组件,然后调用其transitionTo
方法。就像是:
export default class ExampleComponent extends Component {
@service router;
@action
navigate(route) {
this.menuExpanded = false;
this.router.transitionTo(route);
}
}
请注意,还存在transitionTo()
来自 Route 和transitionToRoute()
来自 Controller 的方法,它们的行为类似于LinkTo
helper。但是这些方法现在已被弃用,使用RouterService
是在 js 代码中进行转换的推荐惯用方式。
推荐阅读
- node.js - 如何让 prod 和 dev Firebase 项目具有相同的 Auth 配置?
- javascript - 从动态数据列表中选择文本和值
- javascript - 如何根据增量和减量按钮的输入显示多次输入的卡片?
- java - 以递归关系解决 StackOverflow 异常
- dialogflow-es - 如何使用 DialogFlow 从 Telegram 获取用户位置
- javascript - 实现打开/关闭标签功能的最佳方式
- node.js - VSCode 并使用 launch.json 启动项目
- docker - 如何解决 VBoxManage 未找到问题
- swift4.2 - 方法 collectionView (didSelectItemAt...) 在 iTunesConnect 上不起作用;但是,它确实适用于调试
- java - 将对象添加到 ArrayList 的 ArrayList