2016-03-22 17 views
0

これは基本的に私が望むものです。私はemberのインスペクタで見ることができる現在のパスを取得する必要がありますが、コンポーネント内でどのように取得するのですか?またはこれを行うためのよりよい方法がありますか?おそらくサービスですか? ?Emberjs - 現在のルータパスをコンポーネントメソッドから取得する方法

import Ember from 'ember'; 
 
var inject = Ember.inject; 
 
// maybe rewrite nav link one of these options? 
 
// http://discuss.emberjs.com/t/best-practice-for-a-dynamic-menu-bar/9094 
 
export default Ember.Component.extend({ 
 
    currentUser: inject.service('current-user'), 
 
    actions: { 
 
     logout: function() { 
 
      console.log('header logout'); 
 
      this.get('currentUser').logout(); 
 
     } 
 
    }, 
 
    didInsertElement: function() { 
 
     // get current router path to implement if statements on header navigation 
 
     if(path==='search-results'){ 
 
      jQuery('.showSearchButton').show(); 
 
     } else { 
 
      jQuery('.showSearchButton').hide(); 
 
     } 
 
    } 
 
});
<div id="header" class="header navbar navbar-default navbar-fixed-top" data-state-change="disabled"> 
 
    <!-- begin container --> 
 
    <div class="container-fluid"> 
 
     <!-- begin navbar-header --> 
 
     <div class="navbar-header"> 
 
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#header-navbar"> 
 
       <span class="icon-bar"></span> 
 
       <span class="icon-bar"></span> 
 
       <span class="icon-bar"></span> 
 
      </button> 
 
       <button type="button" class="showSearchButton navbar-search collapsed" onclick="jQuery('.collapse.navbar-collapse.in').collapse('hide');" data-toggle="collapse" data-target="#search-navbar"> 
 
        <i class="fa fa-search"></i> 
 
       </button> 
 
       <img src="assets/images/logo.png" alt="Logo"> 
 
      {{/link-to}} 
 
     </div> 
 
     <!-- end navbar-header --> 
 
     <!-- begin navbar-collapse --> 
 
     <div class="collapse navbar-collapse navbar-right" id="header-navbar"> 
 
      <ul class="nav navbar-nav"> 
 
       {{#if currentUser.logged}} 
 
        {{#if currentUser.hasDashboardPermissions}} 
 
         {{#nav-link-to 'dashboard.list' data-toggle='collapse' data-target='#header-navbar'}}Admin{{/nav-link-to}} 
 
        {{/if}} 
 
        {{#nav-link-to 'user.profile' data-toggle='collapse' data-target='#header-navbar'}}Account{{/nav-link-to}} 
 
        <li><a href="#" {{action 'logout' on="click"}}>Log Out</a></li> 
 
       {{else}} 
 
        {{#nav-link-to 'auth.register' class='reg' data-toggle='collapse' data-target='#header-navbar'}}Register{{/nav-link-to}} 
 
        {{#nav-link-to 'auth.login' data-toggle='collapse' data-target='#header-navbar'}}Login{{/nav-link-to}} 
 
       {{/if}} 
 
      </ul> 
 
      <ul class="nav navbar-nav visible-xs"> 
 
       <li role="separator" class="divider"></li> 
 
       {{#nav-link-to 'about' data-toggle='collapse' data-target='#header-navbar'}}About{{/nav-link-to}} 
 
       {{#nav-link-to 'how-it-works' data-toggle='collapse' data-target='#header-navbar'}}How it works{{/nav-link-to}} 
 
       {{#nav-link-to 'terms-of-service' data-toggle='collapse' data-target='#header-navbar'}}Terms of Service{{/nav-link-to}} 
 
       {{#nav-link-to 'support' data-toggle='collapse' data-target='#header-navbar'}}Support{{/nav-link-to}} 
 
       {{#nav-link-to 'contact-us' data-toggle='collapse' data-target='#header-navbar'}}Contact Us{{/nav-link-to}} 
 
      </ul> 
 
     </div> 
 
     <!-- end navbar-collapse --> 
 
     <div class="collapse navbar-collapse" id="search-navbar"> 
 
      {{find-it header=true withSearch=withSearch class='inhead' inHeader=true}} 
 
     </div> 
 
    </div> 
 
    <!-- end container --> 
 
</div>

答えて

1

<エンバー2.3

this.get('container').lookup('controller:application').currentPath; 

エンバー2.3以降

import Ember from 'ember'; 
const { getOwner } = Ember; 
export default Ember.Component.Extend({ 
... 
    currentPath: Ember.computed(function() { 
    return getOwner(this).lookup('controller:application').currentPath; 
    }), 
... 
}); 
+0

私はgetOwnerメソッドが定義されていない取得しています。 – Artistan

+0

私は "const {getOwner} = Ember;"と思うあなたが逃したものです。元の答えを編集しました。 – lependu

+1

なぜ 'application:Ember.inject.controller()'をしないのですか? – ohcibi

関連する問題