首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >angular-cli:从ts文件打开/关闭MatExpansionPanel

angular-cli:从ts文件打开/关闭MatExpansionPanel
EN

Stack Overflow用户
提问于 2019-10-20 16:43:57
回答 1查看 558关注 0票数 0

我有一个angular-cli组件,它包含多个mat-expansion-panel (https://material.angular.io/components/expansion/overview)。

我需要从ts文件打开/关闭扩展面板,我不确定如何访问各个扩展面板上的属性。我得到了错误

代码语言:javascript
复制
ERROR TypeError: Cannot read property 'open' of undefined

我正在尝试访问此元素

代码语言:javascript
复制
<mat-expansion-panel #first="matExpansionPanel">

使用

代码语言:javascript
复制
first: MatExpansionPanel;
...
this.first.open();

这是我的ts

代码语言:javascript
复制
import { Component, OnInit } from '@angular/core';
import { Category } from '@app/model/Enums';
import { ActivatedRoute } from '@angular/router';    
import { MatExpansionPanel } from '@angular/material';

@Component({
  selector: 'app-some-component',
  templateUrl: './some-component.component.html',
  styleUrls: ['./some-component.component.scss']
})

export class SomeComponent implements OnInit {

  sub: any;
  first: MatExpansionPanel; 
  second: MatExpansionPanel; 

  constructor(private activateRoute: ActivatedRoute) {
    this.sub = this.activateRoute.params.subscribe(params => {

      // Open the MatExpansionPanel with id "first"
      this.first.open();

      // Open the MatExpansionPanel with id "second"
      this.second.open();
  }

  ngOnInit() {
  }

}

这是我的HTML

代码语言:javascript
复制
<mat-accordion>
    <mat-expansion-panel #first="matExpansionPanel">
        <mat-expansion-panel-header>
            <mat-panel-title>
                Title 1
            </mat-panel-title>
            <mat-panel-description>
            </mat-panel-description>
        </mat-expansion-panel-header>
        <p>Content</p>
    </mat-expansion-panel>
</mat-accordion>
<br />
<mat-accordion>
    <mat-expansion-panel #second="matExpansionPanel">
        <mat-expansion-panel-header>
            <mat-panel-title>
                Title 2
            </mat-panel-title>
            <mat-panel-description>
            </mat-panel-description>
        </mat-expansion-panel-header>
        <p>Content</p>
    </mat-expansion-panel>
</mat-accordion>

你知道该怎么做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-21 13:59:50

首先,你必须用@ViewChild实例化你的扩展面板。

代码语言:javascript
复制
@ViewChild('first', {static: true, read: MatExpansionPanel}) first: MatExpansionPanel;

然后,如果您想要执行“打开”功能,则只能在ngAfterViewInit函数中设置页面后才能执行此操作。

代码语言:javascript
复制
ngAfterViewInit() {
  this.first.open();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58471326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档