【问题标题】:How to make angular material expansion panel only open programatically and not when the panel header is clicked如何使角度材料扩展面板仅以编程方式打开,而不是在单击面板标题时打开
【发布时间】:2019-03-15 11:33:17
【问题描述】:

我有一个 mat-expansion-panel,单击 mat-expansion-panel-header 时会打开它。有没有办法禁用这种行为?我想使用它的 open 方法在其他地方打开扩展面板,并禁用通过单击标题打开它的能力。

【问题讨论】:

    标签: angular angular-material


    【解决方案1】:

    Demo

    这不是本机支持的。 尽管您可以通过几个步骤快速构建解决方法:

    首先您需要删除指示器,因为它不是用户能够与之交互的东西:

    <mat-expansion-panel #panel1 [hideToggle]="true">
    

    请注意,我还给组件起了一个名称,以便稍后获取它的引用。

    为了防止用户交互,我们将添加一个 css 类 prevent-click

    &lt;mat-accordion class="prevent-click"&gt;

    .prevent-click{
      pointer-events: none;
    }
    

    如果您希望用户能够与面板的内容进行交互:

    &lt;button class="authorize-click" mat-raised-button&gt;test&lt;/button&gt;

    .authorize-click{
      pointer-events: auto;
    }
    

    注意:您可以使用此类包装扩展面板的内容以允许在其中进行任何交互。


    要与面板交互,请使用面板的引用(见上文)。 你可以调用3个函数

    • open()
    • close()
    • toggle()

    &lt;button (click)="panel1.toggle()"&gt;Toggle panel 1&lt;/button&gt;


    如果您想与组件中的面板进行交互,您需要使用ViewChild() 获取它们的引用。

    例子:

    @ViewChild('panel1') firstPanel: MatExpansionPanel;

    public toggleFirstPanel(){
      this.firstPanel.toggle();
    }
    

    【讨论】:

    • 如何防止只是先点击手风琴标题。问题是我在我的mat-panel-title 中有输入,所以在页面加载时它会获得焦点,当我写一些东西时它关闭然后面板我想要这种行为,但不是第一次。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2019-10-26
    • 1970-01-01
    • 2018-07-23
    • 2020-11-11
    • 2018-10-10
    • 1970-01-01
    相关资源
    最近更新 更多