Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Emberjs将路由发送到新选项卡_Javascript_Ember.js_Browser Tab - Fatal编程技术网

Javascript Emberjs将路由发送到新选项卡

Javascript Emberjs将路由发送到新选项卡,javascript,ember.js,browser-tab,Javascript,Ember.js,Browser Tab,我想让用户在点击EmberJS应用程序中的链接时可以使用Ctrl和Meta键 是否可以将transitionRoute打开到新选项卡中?好问题。。。如果您使用{{link to}},那么它将在没有任何“黑客”的情况下正常工作 但如果必须在单击操作中执行此操作,则不能使用TransitionRoute 您可能可以检查ctrl/meta键是否已按下(请参阅) 然后您必须使用window.open(routeUrl) 然后,您可以使用router#generate生成routeUrl,请参阅 附言:我

我想让用户在点击EmberJS应用程序中的链接时可以使用Ctrl和Meta键


是否可以将
transitionRoute
打开到新选项卡中?

好问题。。。如果您使用{{link to}},那么它将在没有任何“黑客”的情况下正常工作

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

您可能可以检查ctrl/meta键是否已按下(请参阅)

然后您必须使用window.open(routeUrl)

然后,您可以使用router#generate生成routeUrl,请参阅

附言:我没有试过这些,只是猜测一下,但它已经感觉脏了,而且闻起来很难闻。如果可能的话,我会推荐{{链接到}}


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

如果使用Ember 2.16或更高版本,您可以使用
RouterService#urlFor
方法,其工作原理与
Transition to
/
TransitionOnToroute
完全相同,但返回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:

编辑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应该位于getter上,使用@tracked或@computed并传递到

您可以尝试
窗口打开(newRoutePath)
最后我使用了
RouterService#urlFor
。我不能使用
{{link to}}
,因为链接在EmberJS之外,这个部分没有移植到EmberJS ATM。是的,它很脏:p