尝试使用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。
答案 0 :(得分:11)
在Angular 8中,ViewChild需要2个参数
@ViewChild(ChildDirective, {static: false}) Component
答案 1 :(得分:6)
在Angular 8中,ViewChild
采用2个参数:
尝试这样:
@ViewChild('nameInput', { static: false }) nameInputRef: ElementRef;
说明:
{静态:假}
如果您设置 static false ,则始终在视图初始化之后及时为ngAfterViewInit/ngAfterContentInit
回调函数初始化组件。
{静态:真实}
如果您设置 static true ,则初始化将在ngOnInit
的视图初始化处进行
默认情况下,您可以使用{ static: false }
。如果要创建动态视图并希望使用模板引用变量,则应使用{ static: true}
有关更多信息,您可以阅读此article
在演示中,我们将使用模板引用变量滚动到div。
@ViewChild("scrollDiv", { static: true }) scrollTo: ElementRef;
对于{ static: true }
,我们可以在this.scrollTo.nativeElement
中使用ngOnInit
,但是对于{ static: false }
,this.scrollTo
将是{{1}中的undefined
},因此我们只能在ngOnInit
答案 2 :(得分:3)
在Angular 8中,ViewChild始终采用2个参数,而第二个params始终具有2个参数 static:true 或 static:false
您可以尝试这样:
@ViewChild('nameInput', {static: false}) component
此外,static: false
将成为Angular 9中的默认后备行为。
什么是静态false / true: 因此,根据经验,您可以进行以下操作:
{ static: true }
时,需要设置
ngOnInit中的ViewChild。
{ static: false }
仅可在ngAfterViewInit中访问。这是
还有当您有结构性指令时想要去的东西
(即* ngIf)放在模板中的元素上。
答案 3 :(得分:1)
答案 4 :(得分:1)
用于通过IDEA替换所有内容的正则表达式(已通过Webstorm测试)
查找:\@ViewChild\('(.*)'\)
替换:\@ViewChild\('$1', \{static: true\}\)
答案 5 :(得分:1)
您应该像这样使用ViewChild的第二个参数:
@ViewChild("eleDiv", { static: false }) someElement: ElementRef;
答案 6 :(得分:1)
使用此
@ViewChild(ChildDirective,{static:false})组件
答案 7 :(得分:1)
尝试在Angular 8.0中进行此操作:
@ViewChild('result',{static: false}) resultElement: ElementRef;
答案 8 :(得分:0)
这是因为view child需要两个这样的参数
@ViewChild('nameInput',{static:false,})nameInputRef:ElementRef;
@ViewChild('amountInput',{static:false,})amountInputRef: ElementRef;
答案 9 :(得分:0)
在Angular 8中,ViewChild还有另一个参数
@ViewChild('nameInput',{static:false})组件
我解决了如下问题
@ViewChild(MatSort,{static:false})排序:MatSort;
答案 10 :(得分:-1)
那也解决了我的问题。
@ViewChild('map', {static: false}) googleMap;