【问题标题】:Angular 8 + PrimeNG PanelMenu - how to dynamically add menu itemsAngular 8 + PrimeNG PanelMenu - 如何动态添加菜单项
【发布时间】:2021-02-05 18:01:12
【问题描述】:

是否可以根据从数据库中获取的数据来设置菜单项?

从 '@angular/core' 导入 {Component, OnInit}; 从'primeng/api'导入{MenuItem};

@Component({
  selector: 'app-questionnaire',
  templateUrl: './questionnaire.component.html',
  styleUrls: ['./questionnaire.component.scss'],
})
export class QuestionnaireComponent implements OnInit {
  items: MenuItem[];

  constructor() {
  }

  ngOnInit() {
    this.items = [
      {
        label: 'Environmental',
        items: [
          {
            label: 'Question 1',
            icon: 'pi pi-circle-on',
          },
          {
            label: 'Question 2',
            icon: 'pi pi-circle-on',
          },
          {
            label: 'Question 3',
            icon: 'pi pi-circle-on',
          },
        ],
      }, {
        label: 'Social',
        items: [
          {
            label: 'Question 4',
            icon: 'pi pi-circle-on',
          },
          {
            label: 'Question 5',
            icon: 'pi pi-circle-on',
          },
          {
            label: 'Question 6',
            icon: 'pi pi-circle-on',
          },
        ],
      },
      {
        label: 'Governance',
        items: [
          {
            label: 'Question 7',
            icon: 'pi pi-circle-on',
          },
          {
            label: 'Question 8',
            icon: 'pi pi-circle-on',
          },
          {
            label: 'Question 9',
            icon: 'pi pi-circle-on',
          }, {
            label: 'Question 10',
            icon: 'pi pi-circle-on',
          },
        ],
      },
    ];
  }
}

还有我的模板:

<div class="questionnaire questionnaire-container">
  <div class="intro"></div>
  <div class="content">
    <div class="progress-bar">
      PROGRESS BAR
    </div>
    <div class="side-menu">
      <p-panelMenu [model]="items" [style]="{'width':'300px'}"></p-panelMenu>
    </div>
    <div class="questionnaire-content">
      QUESTIONNAIRE CONTENT
    </div>
  </div>
</div>

我问你是因为我不知道它是否可以在组件中做到这一点,而不是在我可以使用 *ngFor= 然后生成菜单项的模板中......如果不可能,那么我会找到其他一些菜单库...

【问题讨论】:

    标签: angular primeng primeng-menu


    【解决方案1】:

    是的,这是可能的。
    您只需使用 Angular 的 http 客户端来请求您想要的数据,然后订阅它并将结果分配给 this.items
    最棘手的部分是将 API 中的数据格式化为 PrimeNG 菜单面板可以理解的格式。 在下面的示例中,我调用了一个 API,该 API 返回给我一个可以直接分配给 this.items 的格式化项目:

      ngOnInit() {
        this.http
          .get("https://express-demo-feat-test2-s8pihd.herokuapp.com/api/items")
          .subscribe(data => (this.items = data as MenuItem[]));
      }
    

    这是stackblitz demo的链接
    如果您需要在使用数据之前对其进行格式化,您可以执行以下操作:

      ngOnInit() {
        this.http
          .get("https://express-demo-feat-test2-s8pihd.herokuapp.com/api/items")
          .pipe(
             map(data => {
               // do some formatting
             })
          )
          .subscribe(data => (this.items = data as MenuItem[]));
      }
    

    【讨论】:

    • 如果您觉得我的回答对您有帮助,请不要忘记接受我的回答,因为人们有时会忘记 =)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多