`route.transitionTo` 已被弃用吗?

7

2023年更新

route.transitionTo已被弃用,建议使用router服务。请参阅下面Andrey的答案中的链接。


原始POST和答案

Ember记录了一个警告,指出transitionTo已被弃用,而推荐使用transitionToRoute。 然而,Ember当前仍然有route.transitionTocontroller.transitionTo。 只有controller.transitionTo在API和源代码中有一个弃用的通知。

route.transitionTo被弃用的通知是一个bug吗?还是过渡到使用this.controllerFor(routename).transitionToRoute()是惯用的方法。

答案:未弃用

结果发现我在控制器中使用了this.transitionTo,这应该只在路由中使用,这使问题难以察觉。

3个回答

4

如果来自控制器,您应该使用controller.transitionToRoute(指定要转换的路由),如果来自路由,则应使用route.transitionTo,由于上下文暗示了路由,因此这是有意义的。


没错,这对我来说一直很清楚,但是为什么在使用route.transitionTo时会收到弃用通知呢?这个通知只是一个bug吗? - runspired
嗯,在这里无法重现:http://emberjs.jsbin.com/OxIDiVU/53/edit在我的实际设置中确实会重现(我已经搜索了可能的controller.transitionTo实例的源代码,但没有找到任何实例)。 - runspired
为什么不使用 Ember 的调试版本,在弃用警告处设置断点,找出是谁在调用它呢? - Kingpin2k
1
找到了,我有一个登录 mixin,它被用在了控制器中,但通常应该在路由中使用。 - runspired
1
w00t,很高兴听到你找到了它,Mixins很酷,但我以前也曾完全超出了我的预期范围。 - Kingpin2k

2

是的,在路由中使用this.transitionTo已经被弃用了。

请参见:

现代替代方法是:

import Route from '@ember/routing/route';
import { inject as service } from '@ember/service';

export default class TodoRoute extends Route {
  @service router;

  beforeModel() {
    this.router.transitionTo('todo');
  }
}

请注意相关问题: https://github.com/emberjs/ember.js/issues/18683并注意此RFC注释: https://rfcs.emberjs.com/id/0095-router-service/#query-parameter-semantics - Andrey Mikhaylov - lolmaus

1

transitionTo只应在controller中引发警告,您很可能在某个控制器中使用了transitionTo

从路由内部:

this.transitionTo('someRoute');

在控制器内部:

this.transtionToRoute('someRoute');

来源:(http://github.com/emberjs/website/pull/964)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接