【问题标题】:angular2: is there a way to know when a component is hidden?angular2:有没有办法知道组件何时隐藏?
【发布时间】:2025-11-24 21:25:02
【问题描述】:

Angular2:有没有办法知道某个组件恰好是该组件的子组件,该组件何时被隐藏、丢失或获得可见性?

template: `
   <div [hidden]="!active" class="pane">
       <ng-content></ng-content>
    </div>
    `

问候

肖恩

【问题讨论】:

  • active 改变时 ;-)

标签: angular


【解决方案1】:

检查组件是否隐藏在组件本身内

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

@Component({
    selector: 'child-component',
    template: `<div>Hello</div>`
})

export class ChildComponent implements OnInit {
    constructor(private elementRef: ElementRef) { }

    ngOnInit() {
        const element = this.elementRef.nativeElement;

        if(element.offsetParent === null) {
            // element is not visible
        }
    }
}

offsetParent的使用可以在这个post找到。

检查子组件是否隐藏

您可以在active 更改时发出事件。

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

@Component({
    selector: 'my-component',
    template: `
    <div [hidden]="!active" class="pane">
       <ng-content></ng-content>
    </div>
    <button (click)="toggleActive()">Click</button>`
})

export class MyComponent {
    @Output() onActive = new EventEmitter<boolean>();
    active: boolean;

    toggleActive() {
        if(this.active) {
            this.active = false;
        } else {
            this.active = true;
        }

        this.onActive.emit(this.active);
    }
}

然后只需在您的父组件中订阅该事件。

【讨论】:

  • tx 我知道,但是需要对显示/隐藏采取行动的组件不应该知道它的父组件......自包含
  • 我不确定我是否完全理解你。我以为您要问的是如何通知父母孩子被隐藏了。在我提供的情况下,孩子(如图所示)不知道父母,它只是发出一个任何人都可以订阅的事件,这并没有将两个组件紧密耦合。
  • 嗨,巴里,是的,但在我的情况下,子组件是自包含的并且为了实现良好的封装,我的孩子不应该是“父母意识”,所以我希望孩子只是能够在 CSS 显示/隐藏时“感知”...对不起,我不清楚,问候
  • @born2net 我更新了我的答案以反映我认为您正在寻找的内容。
最近更新 更多