2016-11-21 3 views
0

У меня есть боковая панель с кнопкой, которая при нажатии меня хотела бы переключить переменную true или false, которая затем отображает/скрывает компонент sibling. Я получаю сообщение об ошибке Type '{}' is not assignable to type 'boolean'. Как я могу достичь этого правильно?Открыть близкий родственный компонент

боковой панели-menu.component.ts

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

@Component({ 
    selector: 'sidebar-menu', 
    templateUrl: './sidebar-menu.component.html', 
    styleUrls: ['./sidebar-menu.component.styl'] 
}) 
export class SidebarMenuComponent { 

    showDetails = false; 
    @Output() 
    onShowDetails: EventEmitter<boolean> = new EventEmitter(); 

    constructor() {} 

    toggleDetails() { 
    this.showDetails = !this.showDetails; 
    this.onShowDetails.emit(this.showDetails); 
    console.log('Sidebar Toggle', this.showDetails); 
    } 

} 

details.component.ts

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

@Component({ 
    selector: 'details', 
    templateUrl: './details.component.html', 
    styleUrls: ['./details.component.styl'] 
}) 
export class DetailsComponent { 

    @Input() showDetails: boolean; 

    constructor() { 

    } 

} 

app.component.ts

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

@Component({ 
    selector: 'app', 
    templateUrl: './app.component.html', 
    styleUrls: ['./app.component.styl'] 
}) 
export class AppComponent { 
    @Input() showDetails: boolean = false; 


    constructor() { 
    } 

} 

app.component.html

<sidebar-menu></sidebar-menu> 
<details *ngIf="showDetails"></details> 
<router-outlet></router-outlet> 
+0

Вы объявляете ShowDetails как EventEmitter, и сразу же после того, как в конструкторе, вы инициализировать его ложным. false не является допустимым значением переменной типа EventEmitter. Не знаете, как сообщение может быть более четким. –

+0

Да, ясно, что я не могу использовать логическое, это очевидно. Почему бы и почему я не могу этого сделать. Как я могу нажать значение true/false между двумя компонентами. – Daimz

+0

Используйте излучатель событий для ... испускать события. Прослушайте эти события из родительского компонента, чтобы изменить значение ввода showDetails компонента детали. –

ответ

1

Ваш ShowDetails свойство не логического типа, это тип EventEmitter<boolean>, и когда вы пытаетесь установить значение как this.showDetails = false; он выдает ошибку. Попробуйте это:

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

@Component({ 
    selector: 'sidebar-menu', 
    templateUrl: './sidebar-menu.component.html', 
    styleUrls: ['./sidebar-menu.component.styl'] 
}) 
export class SidebarMenuComponent { 

    showDetails = false; 
    @Output() 
    onShowDetails: EventEmitter<boolean> = new EventEmitter<boolean>(); 

    constructor() {  
    } 

    toggleTeamDetails() { 
    this.showDetails = !this.showDetails; 
    this.onShowDetails.emit(this.showDetails); 
    console.log('Sidebar Toggle', this.showDetails); 
    }  
} 

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

Кроме того, если вы хотите использовать логическое значение непосредственно в шаблоне вы можете сделать это:

<sidebar #sidebar> 
    <child-component *ngIf="sidebar.showDetails"></child-component> 
</sidebar> 
<sibling-component *ngIf="sidebar.showDetails"></sibling-component> 
+0

У меня был переход, обновленный код выше. Теперь я получаю эту ошибку 'Type 'EventEmitter <{}>' не присваивается типу 'EventEmitter '. Тип '{}' не может быть присвоен типу 'boolean' .' – Daimz

+0

Также мои компоненты боковой панели и детали являются дочерними компонентами приложения, но я не уверен, как это работает с '# sidebar' – Daimz

+0

Я забыл добавить <> в EventEmitter, см. Обновленный код. Вы также можете использовать #variable в узлах-братьях. поэтому он выглядит так: Nikolai

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