我使用的是Angular 17和Tailwind,当判断复选框的 Select /取消 Select 情况时,我的指令会在标记<div>的类中添加和删除'hidden'.我的问题是,当这个指令运行时,标记为<div>innerHTML被删除.

After directive runningBefore directive running

import {
  Directive,
  ElementRef,
  Input,
  HostListener,
  Renderer2,
} from '@angular/core';

@Directive({
  selector: '[checkBoxAccordionTrigger]',
  standalone: true,
})
export class CheckBoxAccordionDirective {
  @Input('checkBoxAccordionTrigger') triggerId!: any;

  constructor(private el: ElementRef, private renderer: Renderer2) {}

  @HostListener('change') onChange() {
    const accordionBodyElement = this.renderer.selectRootElement(
      `[accordion-body="${this.triggerId}"]`
    );

    if (this.el.nativeElement.checked) {
      // this.renderer.removeClass(accordionBodyElement, 'hidden');
      this.renderer.removeStyle(accordionBodyElement, 'display');
    } else {
      // this.renderer.addClass(accordionBodyElement, 'hidden');
      this.renderer.setStyle(accordionBodyElement, 'display', 'hidden');
    }
  }
}
<div id="demands" class="mb-6 items-center">
    <div *ngFor="let departmentDemand of departmentDemandList; let i = index">
        <div class="mb-6 items-center">
            <p class="w-5/12 mr-4 font-semibold underline">{{i+1}} - {{departmentDemand.DepartmentName }} :</p>
        </div>

        <div class="mb-6" *ngFor="let demand of departmentDemand.Demands">
            <div class="flex items-center">
                <input type="checkbox" name="{{ demand.Name }}" value="{{ demand.Name }}" class="mr-2"
                    checkBoxAccordionTrigger="{{demand.Id}}">
                <label for="{{ demand.Id }}">{{ demand.Name }}</label>
            </div>

            <div class="mt-6 ml-8 " [attr.accordion-body]="demand.Id">
                <div *ngFor="let parameter of demand.Parameters" class="mb-2 items-center flex">
                    <label [for]="parameter.Id" class="w-3/12 block mr-4">{{ parameter.Name }} :</label>
                    <input [id]="parameter.Id" [name]="parameter.Name"
                        class="w-7/12 px-3 py-2 border rounded-md focus:outline-none focus:border-blue-200">
                </div>
            </div>

        </div>
    </div>
</div>

我试图改变标记<div>的风格之间的块和没有,但它是不工作.

推荐答案

true来提供第二个参数preserveContent.

abstract selectRootElement(selectorOrNode: any, preserveContent?: boolean): any

根元素的内容应该保留,还是在 bootstrap 时清除(默认行为).

const accordionBodyElement = this.renderer.selectRootElement(
  `[accordion-body="${this.triggerId}"]`,
  true
);

Demo @ StackBlitz

Css相关问答推荐

当optgroup元素不包含任何未使用CSS禁用的选项元素时,如何隐藏它

单独.css文件中的样式不适用于Angular 元件

Safari CSS扫描动画效果不起作用

为什么 :focus 会覆盖 :focus-visible ?

根据选项 colored颜色 更改 Select 文本 colored颜色

条件宽度和省略号不适用于样式化组件 - React.js

如何应用适当样式的元素加消息框?

使用 React-Router 和 Outlet 时如何确保内容保持在下方

从 Angular SCSS 生成 CSS?

弹簧靴.一个文件捕获 CSS 其他没有

对齐视图中的复选框(RN)

Bootstrap:在列之间添加边距/填充空间

完成后如何防止css3动画重置?

在移动网络上禁用捏zoom

可变高度的 CSS 浮动 div

go 除文本输入的内阴影

将 CSS 类添加到 Html.BeginForm()

CSS:悬停一个元素,多个元素的效果?

如何参加滚动事件?

如何重置或覆盖 IE CSS 过滤器?