Вот что показывает консоль:
ОШИБКА TypeError: "_co.book is null" View_SingleBookComponent_0 SingleBookComponent.html: 3 Angular 24 RxJS 5 Angular 11 SingleBookComponent.html: 3: 4 ERROR CONTEXT {…} elDef: Object {nodeIndex: 2, bindingIndex: 0, outputIndex: 0, вывод: 0 ,…} ElView: Object {def: {…}, родитель: {…}, состояние: 1164,…} nodeDef: Object {nodeIndex: 3, bindingIndex: 0, outputIndex: 0,…} nodeIndex: 3 view: Object {def: {…}, родитель: {…}, состояние: 1164,…}...
На странице должна отображаться информация о книге (имя автора и название книги)
Это код single-book.component.ts:
export class SingleBookComponent implements OnInit {
book: Book;
constructor(private route: ActivatedRoute, private booksService: BooksService,
private router: Router) {}
ngOnInit() {
this.book = new Book('', '');
const id = this.route.snapshot.params[' id'];
this.booksService.getSingleBook(+id).then(
(book: Book) => {
this.book = book;
}
);
}
onBack() {
this.router.navigate(['/books']);
}
}
//This is the book-form.component.ts code
export class BookFormComponent implements OnInit {
bookForm: FormGroup;
fileIsUploding = false;
fileURL: string;
fileUploaded = false;
constructor(private formBuilder: FormBuilder,
private booksService: BooksService,
private router: Router) { }
ngOnInit() {
this.initForm();
}
initForm() {
this.bookForm = this.formBuilder.group({
title: ['', Validators.required],
author: ['', Validators.required]
});
}
onSaveBook() {
const title = this.bookForm.get('title').value;
const author = this.bookForm.get('author').value;
const newBook = new Book (title, author);
if (this.fileURL && this.fileURL !== '' ) {
newBook.photo = this.fileURL;
}
this.booksService.createNewBook(newBook);
this.router.navigate(['/book']);
}
const id = this.route.snapshot.params[' id'];
Перед элементом id есть пробел, из-за которого id становится нулевым. так должно быть:
const id = this.route.snapshot.params['id'];
или же
const id = this.route.snapshot.params.id;
добавить оператора элвиса - ?
внутри HTML, где вы используете book
как это:
*ngIf="book?.photo"
или вы также можете добавить *ngIf="book"
к элементу div
который оборачивает данные вашей книги
На момент рендеринга компонента book
не установлена. Просто переместите this.book = new Book('', '');
в конструктор или непосредственно в объявление переменной над вашим конструктором.
В качестве альтернативы, оберните ваш компонентный код в *ngIf
, например:
<ng-container *ngIf="book">
<div ...></div>
</ng-container>
this.booksService.getSingleBook(+id)
ли this.booksService.getSingleBook(+id)
? Добавьте точку останова там, проверьте это.
*ngIf="book?.photo"
,[src]="book?.photo"
и т. Д.