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

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

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

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

字符串

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

在API中我只找到私有hasRoute

更新以更好地了解问题

例如,我有路由:

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


当用户请求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并处理它在路由不存在时抛出的异常来处理这个问题:

get hasRoute() {
  try {
    return Boolean(this.router.urlFor('dashboard'));
  } catch (error) {
    return false;
  }
}

字符串

neekobn8

neekobn83#

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

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

字符串

相关问题