ember.js 如何在进行转换之前知道路由是否存在

8mmmxcuj  于 2023-08-04  发布在  其他
关注(0)|答案(3)|浏览(246)

我想重新过渡我的申请时,路线没有找到,在我的申请路线

  1. export default Ember.Route.extend({
  2. redirect: function(model, transition) {
  3. if (transition.targetName == "not-found") {
  4. var newPath = transition.intent.url //do some logic
  5. this.transitionTo(newpath);
  6. }
  7. }
  8. });

字符串

问题如何在做this.transitionTo(newPath);之前检查newPath是否存在

在API中我只找到私有hasRoute

更新以更好地了解问题

例如,我有路由:

  1. Router.map(function() {
  2. this.route('login'),
  3. this.route('not-found', { path: '/*wildcard' });
  4. });


当用户请求URI(例如en/login)时,请加载not-found路由(默认为通配符)。真实的路径为login
我想删除en,并试图找出如果login路由存在于我的应用程序,否则它将是真实的的“找不到”页
en/login == login且有效,将重定向到登录
en/abc == abc此路由不存在,not-found继续执行

yacmzcpb

yacmzcpb1#

您可以:
第一个月
从容器中创建的任何对象(路由、控制器、组件、服务)来测试routeName是否是有效的路由。如果是,你将得到一个Route对象,如果不是,你将得到undefined(所以你可以检查真实性)。

q5iwbnjs

q5iwbnjs2#

在过渡到刺绣后,getOwner(this).lookup(route:${routeName})答案不再起作用,但是您现在可以使用公共的router service来确定是否存在路由。看起来hasRoute不是API的一部分,但我们通过调用urlFor并处理它在路由不存在时抛出的异常来处理这个问题:

  1. get hasRoute() {
  2. try {
  3. return Boolean(this.router.urlFor('dashboard'));
  4. } catch (error) {
  5. return false;
  6. }
  7. }

字符串

neekobn8

neekobn83#

这可以帮助我找到匹配路由的序列

  1. var recognizer = this.get('router.router.recognizer');
  2. recognizer.recognize(currentPath);

字符串

相关问题