2017-04-13 67 views
1

我的模板中有一个“复制链接”输入,它应该向用户显示当前加载的URL(带有查询参数),供用户复制&粘贴。跟踪模板中的当前网址

与URL输入是属于有一些儿童的父路由模板的一部分:

- Parent route <-- Copy URL link in this template 
    - Child route 
    - Child route 
    - Child route 

这意味着,当你浏览的孩子航线,URL应该在父更新路线。这实际上很难实施。

  • AFAIK没有用于URL更改的本机事件,所以我无法创建组件并只是跟踪任何浏览器事件。我在window上试过hashchange,但是这显然只跟踪#而不是URL或查询参数。
  • 当页面加载时,我不能使用window.location.href,因为任何后续到子路由的转换都不会反映在输入中。
  • 我不能,因为在该点的URL没有更新,没有从中得到与window.location.hrefdidTransition行动父路径上的URL(或任何其他途径钩)(即我得到的以前 URL)

编辑:

目前,这是一个似乎工作的唯一方法:

// In the parent route: 
actions: { 
    didTransition() { 
    this._super(...arguments); 
    Ember.run.schedule('afterRender',() => { 
     this.set('controller.currentURL', window.location.href); 
    });  
    } 
} 

,但似乎很hacky

+0

检查更清洁的方法:http://stackoverflow.com/a/39455543/334913 – acorncom

回答

1

我认为你可以受益于路由器的位置的路径属性。我的意思是,你可以用instance-initializerrouter注入controller,并定义一个计算属性来观察当前路径。请查看以下twiddle。我编写了一个名为instance-initializers\routerInjector的实例初始化程序,将应用程序的路由器注入到每个控制器。我定义application.js控制器内命名location一个计算属性如下:

location: Ember.computed.oneWay('router.location.path') 

我将此添加到application.hbs。如果我得到你想要的东西,这是你想要的。