无法从 Angular 4 中的 viewChild 元素调用函数

Cannot call function from viewChild element in Angular 4

我正在尝试使用 @ViewChild 调用名为 open() 的函数以编程方式触发点击事件,我总是收到错误消息

Cannot read property 'close' of undefined

// 组件

import {Component, OnInit, OnChanges, ViewChild, ElementRef} from '@angular/core';

export class CalendarComponent implements OnInit {

    // Material Design Float Button 
    // https://github.com/GustavoCostaW/ngc-float-button
    ngcFloatButtonData: Object = {
        direction: 'up',
        open:false,
        onToggle: function(): void {
            this.open = !this.open;
        },
        close: function(): void {
            this.open = false;
        }
    };

    public elementRef;
    @ViewChild('float-button') public floatButton: ElementRef;

    constructor(
      public dialog: MatDialog,
      public el: ElementRef,
    ) {

    }

   decrement(): void {
      // try to call the function close()
      this.floatButton.close();
   }

} // end

// 组件 html

 <ngc-float-button
        id="float-button"
        icon="add"
        color="#c0392b"
        class="ngc-float-button-container ngc-float-button-main-button"
        (click)="ngcFloatButtonData.onToggle()"
        [direction]="ngcFloatButtonData.direction">

请使用

之类的 nativeElement 而不是 this.floatButton.close()
this.floatButton.nativeElement.close();

HTML:

<ngc-float-button
        id="float-button"
        #float-button
        icon="add"
        color="#c0392b"
        class="ngc-float-button-container ngc-float-button-main-button"
        (click)="ngcFloatButtonData.onToggle()"
        [direction]="ngcFloatButtonData.direction">

但是我没看到你在哪里调用递减方法。

您可以告诉 ViewChild 注释只使用组件 ComponentWhatever 而不是 ElementRef,这将使您更容易理解您调用的是什么组件。

并且在 HTML 上使用像 #float-button 这样的别名在 id 属性 旁边。

如果它仍然告诉您 close() 方法不存在可能是因为它尚未初始化,请在调用该方法之前检查初始化。