Angular: двусторонняя привязка и привязка событий не работают

Я новичок в angular и изучаю учебник по Heroes. Я за двустороннюю привязку. Я изучил все различные типы привязок и попытался их реализовать. Интерполяция и привязка свойств работают нормально. Однако когда я попробовал двустороннюю привязку (и привязку событий) в файле, указанном в руководстве, с правильным импортом. Чтобы кто-то мог это увидеть. HTML-файл называется Heroes.comComponent.html и является шаблоном для Heroes.comComponent.ts с именем компонента app-heroes, который вызывается в app.comComponent.html. Элементы находятся в нижней части веб-страницы.

Я пробовал использовать привязку событий в app.comComponent (ts и HTML), и она, кажется, работает (синяя кнопка), но не двусторонняя привязка, которая находится под синей кнопкой (возраст героя). ни один из этих двух не работает с компонентом героев (Имя героя и Кнопка «Привет»).

Рабочая ссылка в комментариях, при вставке в пост почему-то не работает.

Приносим извинения, если какие-либо запутанные формулировки и спасибо!

ссылка на stackblitz не работает

ng_dev 26.03.2024 18:05

@ng_dev Какие-нибудь ссылки сейчас работают? Включая этот: stackblitz.com/~/github.com/devisw0/Portfolio Я получил их из общего доступа, и единственным вариантом было скопировать URL-адрес, я вставил его в сообщение, но только тот случай, когда я вставил его в этот комментарий. работает. Извини.

Devan 26.03.2024 18:39

Хорошо всегда проверять наличие ошибок в консоли (F12 в навигаторе). Angular при обнаружении ошибки обычно перестает работать.

Eliseo 27.03.2024 10:57
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
3
201
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Помните: HTML-документ должен содержать только один элемент <body>.

Удалите <body></body> из heroes.component.html. После того, как ваша двусторонняя связь hero.name заработает. Вы ссылаетесь на «синюю кнопку», но ее нет в предоставленном Stackblitz (см. изображение ниже).

Я нашел это, просматривая журналы консоли в stackblitz. Отсюда вы видите, что существует проблема с гидратацией, и проверка HTML является предлагаемым решением.

Мы хотим, чтобы <body></body> был только в одном месте, в index.html.

Ошибка для справки:

Error: NG0500: During hydration Angular expected <body> but found <h2>.

Angular expected this DOM:

<app-heroes _ngcontent-ng-c2099804242 = "" _nghost-ng-c3944397914 = "">
  <body>…</body>  <-- AT THIS LOCATION
  …
</app-heroes>

Actual DOM is:

<app-heroes _ngcontent-ng-c2099804242 = "" _nghost-ng-c3944397914 = "">
  <h2 _ngcontent-ng-c3944397914 = "" style = "color:#2D2E2E;">…</h2>  <-- AT THIS LOCATION
  …
</app-heroes>

Note: attributes are only displayed to better represent the DOM but have no effect on hydration mismatches.

To fix this problem:
  * check the "_HeroesComponent" component for hydration-related issues
  * check to see if your template has valid HTML structure
  * or skip hydration by adding the `ngSkipHydration` attribute to its host node in a template

 Find more at https://angular.io/errors/NG0500

Вижу, в консоль точно не смотрел, но теперь точно знаю, хотя ошибок при подаче может и не быть. Есть ли причина, по которой нам следует использовать только <body></body> в index.html? Также возникает ошибка «Ошибка: NG0500: во время гидратации Angular ожидал <body>, но нашел <h2>», потому что я дважды использовал тег body?

Devan 27.03.2024 16:26

В документах Mozilla обсуждается элемент body: Developer.mozilla.org/en-US/docs/Web/HTML/Element/body Мы решили, что он будет там, потому что это имеет наибольший смысл с точки зрения области применения. Могут быть и другие причины, но у вас будет только один index.html, поэтому оставьте там и свое единственное тело. Остальная часть приложения будет внутри него.

Blake 04.04.2024 04:49

И да, эта ошибка была напрямую связана с двойником <body>. После удаления эта ошибка исчезла из журнала консоли.

Blake 04.04.2024 05:19

Другие вопросы по теме