2016-05-19 5 views
4

Попробованная EventEmitter, но не случайно и так мало документации ... Любая помощь приветствуетсяпеременные доступа Angular2 из другого компонента

У меня есть компонент, называемый боковой панели и еще один под названием заголовок, при нажатии на кнопку из заголовка, он должен скрыть боковую панель ... Как бы вы достигли этого в угловом2?

спасибо

+0

вы должны создать службу для sidebar и bootstrap, затем вставляйте его в любой компонент и изменяйте свойства через s ervice, [здесь почти аналогичная проблема] (http://stackoverflow.com/questions/37069609/show-loading-screen-when-navigating-between-routes-in-angular-2/37070282#37070282) –

ответ

6

Это довольно легко с Сервисом, который вы разделяете между вашими Компонентами.

Для экземпляра SidebarService:

@Injectable() 
export class SidebarService { 
    showSidebar: boolean = true; 

    toggleSidebar() { 
    this.showSidebar = !this.showSidebar; 
    } 
} 

В компоненте боковой панели просто поставить *ngIf с showSidebar переменной из SidebarService. Также не забудьте добавить службу в конструктор.

@Component({ 
    selector: 'sidebar', 
    template: ` 
     <div *ngIf="_sidebarService.showSidebar">This is the sidebar</div> 
    `, 
    directives: [] 
}) 
export class SidebarComponent { 
    constructor(private _sidebarService: SidebarService) { 

    } 
} 

В компоненте, где вы хотите, чтобы справиться с переключая боковой панели также впрыскивать SidebarService и добавить click событие с помощью метода обслуживания.

@Component({ 
    selector: 'my-app', 
    template: ` 
    <div> 
     <button (click)="_sidebarService.toggleSidebar()">Toggle Sidebar</button> 
     <sidebar></sidebar> 
    </div> 
    `, 
    directives: [SidebarComponent] 
}) 
export class App { 
    constructor(private _sidebarService: SidebarService) { 

    } 
} 

Не забудьте добавить SidebarService к поставщикам в вашем файле загрузки:

bootstrap(App, [SidebarService]) 

Plunker, например, использование

+0

Спасибо за демо, это работает, но я не могу импортировать боковую панель в заголовке. Оба импортируются AppComponent, и я хотел бы, чтобы вещи были разделены. У вас есть другое решение? – kfa

+0

Вы можете сделать это, как хотите, все это вращается вокруг «SidebarService», потому что вы сохраняете и изменяете состояние боковой панели. Примером было только показать, как это работает теоретически. – rinukkusu

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