自动展开所有 PrimeNG Accordion 面板以进行打印

Posted

技术标签:

【中文标题】自动展开所有 PrimeNG Accordion 面板以进行打印【英文标题】:Expand all PrimeNG Accordion panels automatically for Printing 【发布时间】:2019-10-14 14:27:45 【问题描述】:

我目前在我的 Angular 项目中使用 PrimeNG 库的手风琴组件。 See info here.

模板包含一些用于打印页面的特殊 css 样式——类似于以下内容:

 @media print 
  .profile-progress-bar, .top-template-header-content, .header.profile-header
    display: none !important;
  
  html, body 
    height: auto;
    font-size: 10px !important;
  

  p-accordionTab > div 
    display: block !important;
    selected: true !important;
  


我正在尝试做的是在为要打印的页面处理 @media print 渲染时自动展开所有 accordionTab 元素。

从文档中我看到每个accordionTab 元素都有一个[selected] 属性,可以绑定并设置为“true”以展开选项卡。

选定内容的可见性是用选定的 支持单向或双向绑定的属性。

但是,当@media print 渲染发生时,这是否可以以某种方式自动触发?

谢谢!

【问题讨论】:

【参考方案1】:

媒体查询是要走的路,您可以采用仅css的方法来实现这一点; TS 或 HTML 文件没有变化

相关css

@media print 
  ::ng-deep .ui-accordion-content-wrapper-overflown 
      overflow: visible;
      height: auto !important;
  

完成demo on stackblitz here

【讨论】:

【参考方案2】:

这是一个有趣的问题。要将其保留在 Angular 的范围内,您可以使用 @angular/cdk/layout 库并注入 MediaMatcher。当然,您也可以使用 javascript 执行几乎完全相同的操作(请参阅 here... 我将向您展示的 cdk/layout 方法实际上只是包装了它)。

MediaMatcher 服务有一个名为matchMedia 的方法,您只需从那里添加一个侦听器:

import  MediaMatcher  from '@angular/cdk/layout';

constructor(private readonly mediaMatcher: MediaMatcher )  

ngOnInit() 
    mediaMatcher.matchMedia('print').addListener(e => e.matches ? 
    console.log('printing!') : null);

所以我把 console.log 放在哪里,只需执行你的逻辑来让手风琴展开。

【讨论】:

以上是关于自动展开所有 PrimeNG Accordion 面板以进行打印的主要内容,如果未能解决你的问题,请参考以下文章

Jquery Accordion 展开全部 全部折叠

如何使用 Ngfor 默认打开 Nebular Accordion

React - Material-UI Accordion:如何使标题居中并展开图标

Accordion 表格单元格 - 用于展开和折叠 ios

如何使用 PrimeNG 删除手风琴面板标题上的箭头图标?

Bootstrap Collapse Accordion - 默认展开/折叠?