'Event' 类型的参数不能分配给 'string' 类型的参数
Argument of type 'Event' is not assignable to parameter of type 'string'
在下面的代码中,我想使用 EventEmitter
来调用方法 onlyNewAddedItems
。
我定义了 EventEmitter
实例和发出事件的方法,如下所示:
@Output() newItemValue = new EventEmitter<string>();
addNewItem(val : string) {
this.newItemValue.emit(val);
console.log("add new item:" + val);
this.items.push(val);
}
为了绑定到第三个事件,我执行了以下操作:
<h1 (newItemValue) = onlyNewlyAddedItems($event)></h1>
但是当我编译代码时,我收到以下错误
Error: src/app/app.component.html:4:42 - error TS2345: Argument of type 'Event' is not assignable to parameter of type 'string'.
4 <h1 (newItemValue) = onlyNewlyAddedItems($event)></h1>
src/app/app.component.ts:5:16
5 templateUrl: './app.component.html',
~~~~~~~~~~~~~~~~~~~~~~
Error occurs in the template of component AppComponent.
请告诉我如何通过 EventEmitter
.
执行方法 onlyNewlyAddedItems
AppComponent.component.ts:
import { Component, Input, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'InputOutputBindings';
currentItem = 'TV';
items = ['item1', 'item2', 'item3', 'item4'];
@Output() newItemValue = new EventEmitter<string>();
addNewItem(val : string) {
this.newItemValue.emit(val);
console.log("add new item:" + val);
this.items.push(val);
}
onlyNewlyAddedItems(val : string) {
console.log("onlyNewlyAddedItems:" + val);
}
}
app.component.html:
<h1 #test = customdirective appItemDetails [item]="currentItem">{{currentItem}} item</h1>
<label>Add an item: <input #newItem></label>
<button (click) = addNewItem(newItem.value)>add new item</button>
<h1 (newItemValue) = onlyNewlyAddedItems($event)></h1>
要清除错误,
在 onlyNewlyAddedItems 方法中,您需要字符串,但您从模板中传递了 $event。请尝试使用以下代码。
<h1 #test = customdirective appItemDetails [item]="currentItem">{{currentItem}} item</h1>
<label>Add an item: <input #newItem></label>
<button (click) = addNewItem(newItem.value)>add new item</button>
<h1 (newItemValue) = onlyNewlyAddedItems(newItem.value)></h1>
But listening inside the component will not work. since these
decorators (Input and Output) are used to communicate outside from the component.
查看此 StackBlitz 演示。
事件发射器用于将数据传递给父组件。
在该示例中,您可以看到当您从单独的子组件发出值时您的代码有效。
检查您的 app.module.ts 文件并确保您的容器中的组件在声明中列出。
@NgModule({
declarations : [
AppComponent,
//your child component
],
...})
onlyNewlyAddedItems(val: string) {
console.log("onlyNewlyAddedItems:" + val);
}
将方法参数数据类型从 string 更改为 any,如下所示。这个方法对我有用。
onlyNewlyAddedItems(val : any) {
console.log("onlyNewlyAddedItems:" + val);
}
如果您想启用严格的模板类型检查,临时解决方案是将 $event 包装在 $any() 中。示例:
$any($event)
它应该可以工作.. 在 Angular 13x
上测试
在下面的代码中,我想使用 EventEmitter
来调用方法 onlyNewAddedItems
。
我定义了 EventEmitter
实例和发出事件的方法,如下所示:
@Output() newItemValue = new EventEmitter<string>();
addNewItem(val : string) {
this.newItemValue.emit(val);
console.log("add new item:" + val);
this.items.push(val);
}
为了绑定到第三个事件,我执行了以下操作:
<h1 (newItemValue) = onlyNewlyAddedItems($event)></h1>
但是当我编译代码时,我收到以下错误
Error: src/app/app.component.html:4:42 - error TS2345: Argument of type 'Event' is not assignable to parameter of type 'string'.
4 <h1 (newItemValue) = onlyNewlyAddedItems($event)></h1>
src/app/app.component.ts:5:16
5 templateUrl: './app.component.html',
~~~~~~~~~~~~~~~~~~~~~~
Error occurs in the template of component AppComponent.
请告诉我如何通过 EventEmitter
.
onlyNewlyAddedItems
AppComponent.component.ts:
import { Component, Input, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
title = 'InputOutputBindings';
currentItem = 'TV';
items = ['item1', 'item2', 'item3', 'item4'];
@Output() newItemValue = new EventEmitter<string>();
addNewItem(val : string) {
this.newItemValue.emit(val);
console.log("add new item:" + val);
this.items.push(val);
}
onlyNewlyAddedItems(val : string) {
console.log("onlyNewlyAddedItems:" + val);
}
}
app.component.html:
<h1 #test = customdirective appItemDetails [item]="currentItem">{{currentItem}} item</h1>
<label>Add an item: <input #newItem></label>
<button (click) = addNewItem(newItem.value)>add new item</button>
<h1 (newItemValue) = onlyNewlyAddedItems($event)></h1>
要清除错误,
在 onlyNewlyAddedItems 方法中,您需要字符串,但您从模板中传递了 $event。请尝试使用以下代码。
<h1 #test = customdirective appItemDetails [item]="currentItem">{{currentItem}} item</h1>
<label>Add an item: <input #newItem></label>
<button (click) = addNewItem(newItem.value)>add new item</button>
<h1 (newItemValue) = onlyNewlyAddedItems(newItem.value)></h1>
But listening inside the component will not work. since these decorators (Input and Output) are used to communicate outside from the component.
查看此 StackBlitz 演示。 事件发射器用于将数据传递给父组件。 在该示例中,您可以看到当您从单独的子组件发出值时您的代码有效。
检查您的 app.module.ts 文件并确保您的容器中的组件在声明中列出。
@NgModule({
declarations : [
AppComponent,
//your child component
],
...})
onlyNewlyAddedItems(val: string) {
console.log("onlyNewlyAddedItems:" + val);
}
将方法参数数据类型从 string 更改为 any,如下所示。这个方法对我有用。
onlyNewlyAddedItems(val : any) {
console.log("onlyNewlyAddedItems:" + val);
}
如果您想启用严格的模板类型检查,临时解决方案是将 $event 包装在 $any() 中。示例:
$any($event)
它应该可以工作.. 在 Angular 13x
上测试