【问题标题】:Emberjs - How do I get that current router path from in a component methodEmberjs - 如何从组件方法中获取当前路由器路径
【发布时间】:2016-07-08 20:29:58
【问题描述】:

所以,这基本上就是我想要的。但是我需要获取可以在 ember 检查器中看到的当前路径,但是如何在组件中获取它?还是有更好的方法来做到这一点? 也许是一项服务?

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>

【问题讨论】:

    标签: javascript ember.js components ember-router


    【解决方案1】:

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

    Ember 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;
      }),
     ...
    });
    

    【讨论】:

    • 我得到 getOwner 未定义。
    • 我认为“const { getOwner } = Ember;”是你错过的。编辑了原始答案。
    • 为什么不application: Ember.inject.controller()
    猜你喜欢
    • 2018-03-11
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 2022-11-27
    • 2020-03-02
    • 2016-10-10
    • 2016-06-05
    • 1970-01-01
    相关资源
    最近更新 更多