3

当用户单击 EmberJS 应用程序内的链接时,我想让 Ctrl 和 Meta Key 成为可能。

是否可以打开transitionToRoute新标签?

4

2 回答 2

3

如果使用 Ember 2.16 或更高版本,您可以使用RouterService#urlFor https://emberjs.com/api/ember/3.0/classes/RouterService/methods/urlFor?anchor=urlFortransitionTo方法,其工作方式与/完全相同,transitionToRoute但返回一个 url 而不是转换到它。

import Controller from '@ember/controller';
import { inject as service } from '@ember/service';

export default Controller.extend({
  routerService: service('router'),

  actions: {
    openSomething(id) {
      let routerService = this.get('routerService');
      let url = routerService.urlFor('my-route', id);

      window.open(url);
    }
  }
});

对于 Ember 2.16 以下的用户,您可以使用 polyfill:https ://github.com/rwjblue/ember-router-service-polyfill

编辑 08/2020类语法

import Controller from '@ember/controller';
import { inject as service } from '@ember/service';
import { computed } from '@ember/object';

export default class SomeController extends Controller {
  @service('router') routerService;

  @computed('model.id')
  get url() {
    let url = this.routerService.urlFor('my-route', this.model.id);

    return url;
  }
}

请注意,对于更易于访问的应用程序,生成的 url 应该在使用 @tracked 或 @computed 的 getter 上并传递给<a href={{this.url}} target='_blank' rel='noopenner noreferrer'>open</a>

于 2018-03-13T19:49:48.157 回答
2

好问题......如果你使用 {{link-to}} 那么它会在没有任何“黑客”的情况下工作......

但是,如果您必须在单击操作中执行此操作,则不能使用 transitionToRoute。

您可能可以检查 ctrl/meta 键是否已按下(请参阅JavaScript:检查是否按下了 CTRL 按钮

然后你将不得不使用 window.open(routeUrl)。

然后,您可以使用 router#generate 生成 routeUrl,请参阅How to generate url for a route in Ember.js

PS:我没有尝试过任何这些只是猜测,但它已经感觉很脏并且闻起来很糟糕。如果可能的话,我会推荐 {{link-to}}。

PPS:我很想听听你是如何解决的:)

于 2018-03-08T15:23:12.623 回答