2017-01-30 66 views
0

我有我的header component有一个功能,可以在点击时切换一个类,这完全适用于头部组件,但我想将该行为传递给我的nav component,它根据这个事件。如何通过组件传递变量Angular 2

我的问题:

我如何可以访问内部nav component这些变量?

期望的行为:

我要的是能够添加CSS clases当我点击toggleMenu

代码:

标题组件:

import { Component, OnInit } from '@angular/core'; 

@Component({ 
    selector: 'app-header', 
    templateUrl: './header.component.html', 
    styleUrls: ['./header.component.scss'] 
}) 

export class HeaderComponent implements OnInit { 

    private showOpened : boolean; 

    constructor() { 

    } 

    ngOnInit() { 
    this.showOpened = false; 
    } 


    toggleMenu() { 
    this.showOpened = !this.showOpened;; 
    } 
} 

标题HTML:

<div class="header-container"> 
    <header class="wrapper clearfix"> 
    <h1 class="logo">---</h1> 
    <input type="checkbox" class="checkbox-menu" id="menu-toogle"> 
    <label for="menu-toogle" class="menu-toogle" (click)="toggleMenu()"></label> 
    <div class="bar" [class.animate]="showOpened"></div> 
    <span class="icon-search"></span> 
    </header> 
</div> 

导航组件

import { Component, Input, OnInit } from '@angular/core'; 

@Component({ 
    selector: 'app-nav', 
    templateUrl: './nav.component.html', 
    styleUrls: ['./nav.component.scss'] 
}) 

export class NavComponent implements OnInit { 
    constructor() { } 

    ngOnInit() { 
    } 

} 

导航HTML

<nav [class.open-menu]="showOpened"></nav> 
+0

看看@Input:http://learnangular2.com/inputs/ – Seiyria

+0

此外,请注意您使用的是正确的选择器。我发现你使用'nav'和'header'而不是'app-nav'和'app-header' - 这不会像你期望的那样工作。 – Seiyria

回答

0

尝试此代码: 部首HTML

<div class="header-container"> 
    <header class="wrapper clearfix"> 
    <h1 class="logo">---</h1> 
    <input type="checkbox" class="checkbox-menu" id="menu-toogle"> 
    <label for="menu-toogle" class="menu-toogle" (click)="toggleMenu()"></label> 
    <div class="bar" [class.animate]="showOpened"></div> 
    <span class="icon-search"></span> 
    </header> 
    <app-nav [showOpened]="showOpened"></app-nav> <!-- put this code where you want to place your nav --> 
</div> 

导航组件

import { Component, Input, OnInit } from '@angular/core'; 

@Component({ 
    selector: 'app-nav', 
    templateUrl: './nav.component.html', 
    styleUrls: ['./nav.component.scss'] 
}) 

export class NavComponent implements OnInit { 

    @Input() showOpened: boolean; 
    constructor() { } 

    ngOnInit() { 
    } 

} 

导航HTML

<nav [class.open-menu]="showOpened"></nav> <!-- Now you can access showOpened value from parent header --> 

您可以找到有关角文档组件交互的更多信息: https://angular.io/docs/ts/latest/cookbook/component-communication.html#!#parent-to-child

+0

非常感谢你,阅读和阅读后,我终于明白这是如何工作的。顺便说一句,只是最后一个问题,如果他们是兄弟姐妹,我想我应该创建一个服务? –

+0

我可能是错的,但我认为兄弟姐妹组件现在无法互动。如果您创建服务并在AppModule中提供它,则这两个组件将使用您的服务的不同实例,因此您无法检索相同的数据。要使它们使用同一服务实例,您必须仅在父组件中提供它,以便子组件可自动访问同一实例。 – mickdev