2016-04-01 5 views
0

У меня есть 4 компонента на моем приложении Angular 2. Компоненты - это заголовок, нижний колонтитул, навигация и контент. У меня есть кнопка в компоненте заголовка, и я хочу показать/скрыть контент в компоненте навигации, когда пользователь нажимает на кнопку из компонента заголовка. Я хочу знать, что когда я нажимаю кнопку из заголовка, как передать значение Boolean из компонента заголовка в компонент навигации. Все компоненты имеют собственные html-шаблоны. Дайте мне знать, каков способ передать значение переключения из заголовка в компонент навигации.Угловое 2 проходящее значение между компонентами

Благодаря

+0

Пожалуйста, добавьте код, который показывает свои компоненты, их шаблон, и как они связаны между собой. –

ответ

1

Вы можете воспользоваться sharedservice и sharedobject, как показано ниже.

working demo

sharedService.ts

export interface ImyInterface { 
    show:boolean; 
} 

@Injectable() 
export class sharedService { 
    showhide:ImyInterface={show:true}; 

    hide(){ 
     this.showhide.show=!this.showhide.show; 
    } 
} 

header.ts (content.ts)

import {Component,Injectable} from 'angular2/core'; 
import {sharedService} from 'src/sharedService'; 

@Component({ 
    selector: 'thecontent', 
    template: ` 
    <div>Header Component <button (click)=showhide()>show/hide</button></div> 
    ` 
}) 
export class TheContent { 
    constructor(private ss: sharedService) { 
    console.log("content started"); 
    } 
    showhide() { 
    this.ss.hide(); 
    } 
} 

navigation.ts (nav.ts)

import {Component,bind} from 'angular2/core'; 
import {sharedService} from 'src/sharedService'; 

@Component({ 
    selector: 'navbar', 
    template: ` 
    <style> 
    .bk{ 
      background-color:black; 
      color:white; 
    } 
    </style> 
    <div>Navigation Component </div> 
    <div [class.bk]="true" *ngIf="showHide.show"> Showing </div> 
    <hr> 
    <hr> 
    ` 
}) 
export class Navbar { 
    showHide:ImyInterface; 
    constructor(ss: sharedService) { 
    this.showHide=ss.showhide; 
    } 
} 
+0

Спасибо за решение. Я попробовал код, который вы предоставили. Я получаю эту ошибку 'EXCEPTION: TypeError: не могу прочитать свойство 'show' undefined в [showHide.show в edockNavigationComponent @ 3: 32]' – user3739018

+0

написал ли вы эту строку в 'export class Navbar {showHide: ImyInterface; ... ... ...} '? и тот же интерфейс в 'sharedService'. Проверьте мою демонстрацию правильно. – micronyks

+0

Очень приятно. Мне нравится, что вы используете API, 'hide()', вместо того, чтобы изменять свойство 'show' непосредственно в' showhide() '. Мне кажется, мне нравится использование интерфейса. Это кажется более эффективным, чем использование другого API в сервисе для получения значения. Однако, если вы использовали API для получения текущего значения 'show' (например,' * ngIf = "ss.getShowValue()'), тогда вам не нужно будет обертывать логическое значение в объекте. не знаю, что мне больше нравится ... эффективность или больше инкапсуляции. Ваши мысли? –

Смежные вопросы