2017-04-13 78 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。如果我得到你想要的東西,這是你想要的。