angular - 如何以 Angular 创建弹出组件?

标签 angular

我想创建一个 popover将具有如下 api 的组件:

<button  popover [content]="popover_content" >popover test</button>

<ng-template #popover_content>
  <ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
  </ul>
</ng-template>

我在某种程度上尝试过,请参阅 stackblitz

问题是:
  • 内容出现在按钮内。我该如何避免?

  • enter image description here
  • 我希望内容给它一些 css 类,但是当我访问它时,我只得到一个评论节点。
  •       @Input() set content(val: TemplateRef<void>) {
            this.popoverContent = val;
            console.log(val.elementRef.nativeElement);//this is a comment node. WHY??
          }
    

    我不确定如何解决上述两个问题。如果有人可以提供建议,那就太好了。

    最佳答案

    ng-template正在编译以进行评论,您实际上无法获取其内容。您可以尝试将其设置为隐藏的 div,这可能会起作用( https://stackblitz.com/edit/angular-bj2ke4 )。

    在任何情况下,我都对 API 进行了一些小的更改,因此它会与以下模式匹配(我希望这对您没问题):

    <app-popover buttonText="Click Me">
      <ul>
        <li>THIS</li>
        <li>IS</li>
        <li>MY POPOVER</li>
      </ul>
    </app-popover>
    

    很简单,popover.component.ts :
    import { Component, Input } from '@angular/core';
    
    @Component({
      selector: 'app-popover',
      templateUrl: './popover.component.html',
      styleUrls: ['./popover.component.css']
    })
    export class PopoverComponent {
    
      @Input() buttonText: string;
      isActive = false;
    
      toggle() {
        this.isActive = !this.isActive;
      }
    
    }
    
    popover.component.html :
    <button (click)="toggle()">{{ buttonText }}</button>
    
    <div class="popover" [class.active]="isActive">
      <ng-content></ng-content>
    </div>
    

    Stackblitz 演示 - https://stackblitz.com/edit/angular-ovecbp

    关于angular - 如何以 Angular 创建弹出组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57444692/

    相关文章:

    angular - 在 Angular Web 组件内加载 native Web 组件(非 Angular 组件)

    angular - ngAfterContentInit() 和 ngAfterViewInit() 有什么区别?

    Angular 4 : http client module get request. API key 放置

    javascript - 从 Node js 子目录提供 Angular 4 应用程序时,语法错误 : expected expression, 得到 '<'

    Angular2 - 服务未在构造函数和 ngOnInit 之外定义?

    angular - 如何验证具有 Material 形状字段的 Angular 形状?

    angular - JWT Bearer ASP.Net Core 3.1 用户在服务器上为空

    javascript - Angular 识别从 root 导入?

    angular - 添加复合属性

    javascript - Angular:如何构建与 ng serve 创建的文件相同的文件