Angular @ViewChild() error: Expected 2 arguments, but got 1
Angular @ViewChild() error: Expected 2 arguments, but got 1
尝试 ViewChild 时出现错误。错误是 "An argument for 'opts' was not provided."
@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): error TS2554: Expected 2 arguments, but got 1.
Angular 8
在Angular8中,ViewChild还有一个param
@ViewChild('nameInput', {static: false}) component : Component
Angular 9 & Angular 10
在Angular 9
中默认值为static: false
,所以不需要提供参数除非你想使用{static: true}
这是因为 view child 需要两个参数 try 这样
@ViewChild('nameInput', { static: false, }) nameInputRef: ElementRef;
@ViewChild('amountInput', { static: false, }) amountInputRef:
ElementRef;
在Angular8中,ViewChild有2个参数
@ViewChild(ChildDirective, {static: false}) Component
这也解决了我的问题。
@ViewChild('map', {static: false}) googleMap;
在Angular8中,ViewChild
有2个参数:
这样试试:
@ViewChild('nameInput', { static: false }) nameInputRef: ElementRef;
解释:
{ static: false }
如果您设置 static false,子组件总是在 ngAfterViewInit/ngAfterContentInit
回调函数的视图初始化之后及时初始化。
{ static: true}
如果设置 static true,子组件初始化将在 ngOnInit
的视图初始化时进行
默认情况下您可以使用 { static: false }
。如果您正在创建动态视图并希望使用模板引用变量,那么您应该使用 { static: true}
更多信息,您可以阅读这篇article
在演示中,我们将使用模板引用变量滚动到 div。
@ViewChild("scrollDiv", { static: true }) scrollTo: ElementRef;
使用{ static: true }
,我们可以在ngOnInit
中使用this.scrollTo.nativeElement
,但是使用{ static: false }
,this.scrollTo
将在[=中使用undefined
14=] ,所以我们只能在 ngAfterViewInit
中访问
用于通过 IDEA 全部替换的正则表达式(使用 Webstorm 测试)
查找:\@ViewChild\('(.*)'\)
替换:\@ViewChild\('', \{static: true\}\)
在Angular8中,ViewChild总是带2个param,第二个params总是带
静态:真或静态:假
你可以这样试试:
@ViewChild('nameInput', {static: false}) component
此外,static: false
将成为 Angular 9 中的默认回退行为。
什么是静态的false/true:
因此,根据经验,您可以执行以下操作:
{ static: true }
需要在访问时设置
ngOnInit 中的 ViewChild。
{ static: false }
只能在ngAfterViewInit中访问。这是
还有当你有一个结构指令时你想要做什么
(即 *ngIf)在模板中的元素上。
您应该像这样对 ViewChild 使用第二个参数:
@ViewChild("eleDiv", { static: false }) someElement: ElementRef;
使用这个
@ViewChild(ChildDirective, {static: false}) Component
在Angular8中,ViewChild还有一个param
@ViewChild('nameInput', {static: false}) 组件
我解决了如下问题
@ViewChild(MatSort, {static: false}) 排序:MatSort;
在 angular 8.0 中试试这个:
@ViewChild('result',{static: false}) resultElement: ElementRef;
尝试 ViewChild 时出现错误。错误是 "An argument for 'opts' was not provided."
@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): error TS2554: Expected 2 arguments, but got 1.
Angular 8
在Angular8中,ViewChild还有一个param
@ViewChild('nameInput', {static: false}) component : Component
Angular 9 & Angular 10
在Angular 9
中默认值为static: false
,所以不需要提供参数除非你想使用{static: true}
这是因为 view child 需要两个参数 try 这样
@ViewChild('nameInput', { static: false, }) nameInputRef: ElementRef;
@ViewChild('amountInput', { static: false, }) amountInputRef: ElementRef;
在Angular8中,ViewChild有2个参数
@ViewChild(ChildDirective, {static: false}) Component
这也解决了我的问题。
@ViewChild('map', {static: false}) googleMap;
在Angular8中,ViewChild
有2个参数:
这样试试:
@ViewChild('nameInput', { static: false }) nameInputRef: ElementRef;
解释:
{ static: false }
如果您设置 static false,子组件总是在 ngAfterViewInit/ngAfterContentInit
回调函数的视图初始化之后及时初始化。
{ static: true}
如果设置 static true,子组件初始化将在 ngOnInit
默认情况下您可以使用 { static: false }
。如果您正在创建动态视图并希望使用模板引用变量,那么您应该使用 { static: true}
更多信息,您可以阅读这篇article
在演示中,我们将使用模板引用变量滚动到 div。
@ViewChild("scrollDiv", { static: true }) scrollTo: ElementRef;
使用{ static: true }
,我们可以在ngOnInit
中使用this.scrollTo.nativeElement
,但是使用{ static: false }
,this.scrollTo
将在[=中使用undefined
14=] ,所以我们只能在 ngAfterViewInit
用于通过 IDEA 全部替换的正则表达式(使用 Webstorm 测试)
查找:\@ViewChild\('(.*)'\)
替换:\@ViewChild\('', \{static: true\}\)
在Angular8中,ViewChild总是带2个param,第二个params总是带 静态:真或静态:假
你可以这样试试:
@ViewChild('nameInput', {static: false}) component
此外,static: false
将成为 Angular 9 中的默认回退行为。
什么是静态的false/true: 因此,根据经验,您可以执行以下操作:
{ static: true }
需要在访问时设置 ngOnInit 中的 ViewChild。{ static: false }
只能在ngAfterViewInit中访问。这是 还有当你有一个结构指令时你想要做什么 (即 *ngIf)在模板中的元素上。
您应该像这样对 ViewChild 使用第二个参数:
@ViewChild("eleDiv", { static: false }) someElement: ElementRef;
使用这个
@ViewChild(ChildDirective, {static: false}) Component
在Angular8中,ViewChild还有一个param
@ViewChild('nameInput', {static: false}) 组件
我解决了如下问题
@ViewChild(MatSort, {static: false}) 排序:MatSort;
在 angular 8.0 中试试这个:
@ViewChild('result',{static: false}) resultElement: ElementRef;