Угловая ошибка типа: объект (_co.book) имеет значение null?

-1

Вот что показывает консоль:

ОШИБКА 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']);
  }
  • 1
    Попробуйте html, например: *ngIf="book?.photo" , [src]="book?.photo" и т. Д.
  • 0
    Зачем вам делать снимок кода, а не копировать, вставлять его?
Показать ещё 4 комментария
Теги:
angular

3 ответа

0
const id = this.route.snapshot.params[' id'];

Перед элементом id есть пробел, из-за которого id становится нулевым. так должно быть:

const id = this.route.snapshot.params['id'];

или же

const id = this.route.snapshot.params.id;
0

добавить оператора элвиса - ? внутри HTML, где вы используете book как это:

*ngIf="book?.photo"

или вы также можете добавить *ngIf="book" к элементу div который оборачивает данные вашей книги

0

На момент рендеринга компонента book не установлена. Просто переместите this.book = new Book('', ''); в конструктор или непосредственно в объявление переменной над вашим конструктором.

В качестве альтернативы, оберните ваш компонентный код в *ngIf, например:

<ng-container *ngIf="book">
   <div ...></div>
</ng-container>
  • 0
    ну, ошибки исчезли, но нет данных, а также кнопка «назад» показывает и скрывает быстро.
  • 0
    Ну, это еще одна проблема. this.booksService.getSingleBook(+id) ли this.booksService.getSingleBook(+id) ? Добавьте точку останова там, проверьте это.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню