【问题标题】:Angular + SCSS: how to apply style on component on parent :hoverAngular + SCSS:如何在父组件上应用样式:悬停
【发布时间】:2019-03-13 18:49:03
【问题描述】:

我正在尝试在其父组件悬停时显示我的组件。

当元素悬停时,action-list 组件将显示可能的操作列表。目标是有一种上下文动作。

我正在使用host-context 来检测父对象何时悬停,但问题是它将通过父树。 如果我有以下内容::host-context(:hover) {...} action-list 将在其任何祖先(直到身体)悬停时显示。在这种情况下,它将始终显示为Demo

我设法通过在父级和 scss 中设置一个 css 类来使其工作 :host-context(.parent:hover) {...}` Demo

它运行良好,但我想避免在父级上设置额外的类。

问题:

我知道这在纯 CSS 中是不可能的,但是否有一个 angular/scss 魔术语法允许选择直接父级?

类似:host-context(parent():hover) {...}

【问题讨论】:

    标签: angular sass scss-mixins


    【解决方案1】:

    这里有两个解决方案:

    • 在父组件中:
    .parent-component:hover ::ng-deep app-child-component .div-in-child {}
    
    • 在子组件中
    :host-context(app-parent-component:hover) .child-component-div {}
    

    ::ng-deep 让您可以通过子组件树强制向下进入所有子组件视图。

    【讨论】:

    • 感谢您的回答,但我不能接受它,因为:1. ng-deep 已被弃用:angular.io/guide/component-styles 2. 父组件可以是任何类型的组件(在您的解决方案中它只能工作如果父母是app-parent-component
    • stackoverflow.com/questions/47024236/… 它实际上已被弃用,但没有什么可以替代它。 “继续使用 ::ng-deep 及其替代品,直到创建替代品 - 弃用只是一个早期通知,这样人们就不会在实际变化发生时措手不及。”你在说什么“是app-parent-component
    • 在您的第二个解决方案中::host-context(app-parent-component:hover) .child-component-div {}app-parent-component 必须被子组件知道,我想避免这种情况。我想要一个通用组件。
    • 哦,好吧,我明白了。最干净的解决方案是使用布尔值 (@Input() showActions) 和父级中的输入。另一个解决方案,不是干净但更通用,是获取组件constructor(element: ElementRef) {} 并使用element.nativeElement 访问父级。
    猜你喜欢
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 2015-05-31
    相关资源
    最近更新 更多