2017-04-13 4 views
1

テンプレートにコピーリンクの入力があり、&ペーストをコピーするために、現在読み込まれているURL(クエリパラメータ付き)をユーザーに表示する必要があります。テンプレート内の現在のURLをトラッキングする

URLを入力する子どもの数を持つ親ルートに属するテンプレートの一部です:

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

これは、子のルートをナビゲートして、URLが親に更新する必要があることを意味しルート。これは実装が非常に難しいと判明しています。

  • AFAIK URL変更のネイティブイベントはありません。コンポーネントを作成してブラウザイベントを追跡することはできません。私はhashchangewindowにしようとしましたが、明らかにURLまたはクエリのパラメータではなく#しか追跡していません。
  • 子ルートへのその後の遷移が入力に反映されないため、ページが読み込まれるときにwindow.location.hrefを使用することはできません。その時点でURLがまだ更新されていませんので、私は親ルート上didTransitionアクション(または任意の他のルートフック)でwindow.location.hrefでURLを取得することはできません
  • (つまり私は以前 URLを取得)

EDIT:

現時点では、これが動作しているようです唯一のアプローチです:

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

がかなりハッキーに見えます

+0

よりクリーンなアプローチを確認してください:http://stackoverflow.com/a/39455543/334913 – acorncom

答えて

1

私はあなたがルータの場所のパスのプロパティから利益を得ることができると思います。つまり、routercontrollerに入れてinstance-initializerと好きなようにして、計算されたプロパティを定義して現在のパスを見ることができます。下記のtwiddleをご覧ください。私はinstance-initializers\routerInjectorという名前のインスタンス初期化プログラムを書いて、アプリケーションのルータをすべてのコントローラに注入しました。次のように私はapplication.jsコントローラ内location名前計算プロパティを定義:

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

Iはapplication.hbsにこれを追加しました。もし私があなたが欲しいものを正しく持っていれば;これはあなたが望むものです。

関連する問題