代码之家  ›  专栏  ›  技术社区  ›  Flavien Volken

Angular 2.0从左到右模块和阴影DOM

  •  0
  • Flavien Volken  · 技术社区  · 8 年前

    我有一个网站,支持“从右到左”的语言,如阿拉伯语。 如果语言是阿拉伯语,我会在body标签上加上 dir="rtl" 属性通过这种方式,所有内联定位的子级都从右侧对齐,即使它们位于自定义组件中。

    现在我想有一个自定义样式,以防这些组件之一继承了从右到左的指令。实现这一目标的常见方法如下:

    body[dir="rtl"] myComponent {
    // custom style if I am in right to left
    }
    

    问题是,使用阴影DOM时,选择器将无法获取父级的属性,因此我的样式将不会被应用。因此,我想知道是否有任何方法可以使用Angular 2.0从父属性显式继承模块?这样我就可以简单地写了

    myComponent[dir="rtl"]{
    // my stlyles
    }
    

    我完了

    2 回复  |  直到 8 年前
        1
  •  1
  •   Günter Zöchbauer    8 年前

    除非您设置,否则Angular2中没有阴影DOM ViewEncapsulation.Native 你那样做了吗?Angular2中的样式应该没有问题。您可以使用 >>> /deep/ 跨越组件边界。

    >>> /深/ 也可以使用,但这需要更多的代码来演示您的情况。

        2
  •  1
  •   Flavien Volken    8 年前

    3种可能的方式:

    A、 最佳解决方案

    :host-context([dir="rtl"]) myComponent{
    // custom style if I am in right to left
    }
    

    :dir pseudo-class

    C、 以编程方式显式地将类放入组件(错误)

    import {ElementRef, AfterContentInit} from '@angular/core';
    
    @Component({
    ...
    })
    export class MyComponent implements AfterContentInit {
      @HostBinding('attr.dir')
      public dir:string;
    
      constructor(private element:ElementRef) {
    
      }
    
      public ngAfterContentInit():void {
        this.dir = getComputedStyle(this.element.nativeElement).direction;
      }
    }