我正在尝试实现事件发射器,以便当将待办事项插入数据库时,它会添加到待办事项列表中。但它不起作用。请在下面找到代码: todoinput component(todo.input.html(:向数据库添加todo的组件
import { Component, OnInit, EventEmitter, Output } from '@angular/core';
import { Todos } from '../../models/Todos';
import { TodosService } from '../../services/todos.service';
@Component({
selector: 'app-todoinput',
templateUrl: './todoinput.component.html',
styleUrls: ['./todoinput.component.css']
})
export class TodoinputComponent implements OnInit {
@Output() newTodo: EventEmitter<Todos> = new EventEmitter();
constructor(private _todosService: TodosService) { }
ngOnInit() {
}
addTodo(text) {
this._todosService.addTodo({
text: text,
}).subscribe((todo) => {
this.newTodo.emit(todo);
})
}
}
app.component.html:它包含所有组件。
<app-navbar></app-navbar>
<app-todoinput (newTodo)="onNewTodo($event)">
</app-todoinput>
<app-todolist>
</app-todolist>
todolist.component.ts:将todo添加到todos列表中
import { Component, OnInit } from '@angular/core';
import { Todos } from '../../models/Todos';
import { TodosService } from '../../services/todos.service';
@Component({
selector: 'app-todolist',
templateUrl: './todolist.component.html',
styleUrls: ['./todolist.component.css']
})
export class TodolistComponent implements OnInit {
todos: Todos[]
constructor(private _todosService: TodosService) {
}
ngOnInit() {
this._todosService.getTodos().subscribe((todos) => {
this.todos = todos;
})
}
onNewTodo(todo: Todos) {
console.log('-- the passed todo --', todo);
this.todos.unshift(todo);
}
}
当将待办事项添加到数据库时,它会尝试发出 newTodo。但它抛出以下错误:
AppComponent.html:2 ERROR TypeError: _co.onNewTodo is not a function
at Object.eval [as handleEvent] (AppComponent.html:2)
at handleEvent (core.js:10258)
at callWithDebugContext (core.js:11351)
at Object.debugHandleEvent [as handleEvent] (core.js:11054)
at dispatchEvent (core.js:7717)
它看起来像一个正确的实现。谁能让我知道我做错了什么?它不适用于事件发射器吗?
谢谢
根据您的示例,您已在AppComponent
的 HTML 中<app-todoinput (newTodo)="onNewTodo($event)">
定义了此模板。虽然您的onNewTodo($event)
是todolist.component.ts
的一部分.因此错误。
相反,您应该做的是,由于您要更改两个同级组件之间的数据,因此您应该使用BehaviorSubject
实现服务,而不是子组件中的Output
属性。