当尝试ViewChild时,我得到了错误。错误提示:“没有为‘opts’提供参数。”

@ViewChild给出错误。

import { Component, OnInit, ElementRef, ViewChild, Output, EventEmitter } from '@angular/core';
import { Ingredient } from 'src/app/shared/ingredient.model';

@Component({
  selector: 'app-shopping-edit',
  templateUrl: './shopping-edit.component.html',
  styleUrls: ['./shopping-edit.component.css']
})
export class ShoppingEditComponent implements OnInit {

@ViewChild('nameInput') nameInputRef: ElementRef;
@ViewChild('amountInput') amountInputRef: ElementRef;
@Output() ingredientAdded = new EventEmitter<Ingredient>();
  constructor() {}

  ngOnInit() {
  }

  onAddItem() {
    const ingName = this.nameInputRef.nativeElement.value;
    const ingAmount = this.amountInputRef.nativeElement.value;
    const newIngredient = new Ingredient(ingName, ingAmount);
    this.ingredientAdded.emit(newIngredient);
  }

}

ts(11,2):错误TS2554:期望2个参数,但得到1。


当前回答

这也解决了我的问题。

@ViewChild('map', {static: false}) googleMap;

其他回答

角8

在Angular 8中,ViewChild有另一个参数

@ViewChild('nameInput', {static: false}) component : Component

你可以在这里和这里读到更多信息

Angular 9和Angular 10

在Angular 9中,默认值是static: false,所以不需要提供参数,除非你想使用{static: true}

在Angular 8中,ViewChild总是接受2个参数,第二个参数也总是 Static: true或Static: false

你可以这样尝试:

@ViewChild('nameInput', {static: false}) component

同样,static: false将是Angular 9中的默认回退行为。

什么是静态错误/正确: 所以根据经验,你可以选择以下方法:

对象时需要设置{static: true} ViewChild在ngOnInit中。 {static: false}只能在ngAfterViewInit中访问。这是 当你有一个结构指令的时候你想要做什么 (即*ngIf)在模板中的元素上。

使用这个

@ViewChild(ChildDirective, {static: false}

这是因为viewchild需要两个参数,像这样尝试

@ViewChild('nameInput', {static: false,}) @ViewChild('amountInput', {static: false,}) ElementRef;

Regex替换所有通过IDEA (Webstorm测试)

觉得:\ @ViewChild。 \('(.*)'\)

替换:\@ViewChild\('$1', \{static: true\}\)