Ваш сервис должен возвращать наблюдаемое следующим образом:
addTodo(todo: Todo): void {
return this.aHttpService.post<Todo>(`http://localhost:3000/todos`, todo);
}
И использовать его в таком компоненте:
onAddTodo(todo: Todo) {
this.todoDataService.addTodo(todo).subscribe(val => {
this.incompletetodos.push(val);
});;
}
(я свернул код)
Ссылка: https://angular.io/tutorial/toh-pt6#add-a-new-hero
src / app / heroes / heroes.component.ts (добавить)
add(name: string): void {
name = name.trim();
if (!name) { return; }
this.heroService.addHero({ name } as Hero)
.subscribe(hero => {
this.heroes.push(hero);
});
}
src / app / hero.service.ts (addHero)
/** POST: add a new hero to the server */
addHero (hero: Hero): Observable<Hero> {
return this.http.post<Hero>(this.heroesUrl, hero, httpOptions).pipe(
tap((hero: Hero) => this.log(`added hero w/ id=${hero.id}`)),
catchError(this.handleError<Hero>('addHero'))
);
}
Почему моя угловая страница не обновляется при использовании EventEmitter?
Возможно, вы так думаете, мы используем Angular для создания одностраничного приложения, которое не вызывает полного обновления страницы, мы просто обновляем часть веб-сайта.
По сути,приложение работает, но мне нужно нажать F5, чтобы обновить страницу после внесения каких-либо изменений.
Потому что всякий раз, когда вы нажимаете F5, ваше Angular-приложение хорошо инициализируется, что вызывает этот хук жизненного цикла:
ngOnInit() {
this.completetodos = this.completedTodos();
this.incompletetodos = this.incompletedToDos();
}
Следовательно, ваше приложение отображает обновленные данные базы данных.
Следует отметить, чтораньше это работало, когда я использовал массив в качестве источника данных, но когда я перешел на json-сервер и Observables, страница перестала обновлять .
На самом деле, когда вы используете массив в качестве источника данных, наше приложение вообще не обновляется.Это то, что называется привязка данных , данные, которые мы видим в пользовательском интерфейсе, привязаны к данным, которые приложение Angular хранит (на стороне клиента, в памяти клиента).
При обмене даннымис сервером, когда мы вносим некоторые изменения в базу данных сервера, мы должны обновить данные нашего клиента на основе ответа от сервера.Вот как мы поступим в этом случае в вашем приложении Todo.