Javascript Emberjs将路由发送到新选项卡
我想让用户在点击EmberJS应用程序中的链接时可以使用Ctrl和Meta键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,请参阅 附言:我
是否可以将
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