Рубрики
Без рубрики

Все, что вам нужно знать о NG-шаблоне, NG-Content, NG-контейнер и * NGTemblateTlet в угловом

Это был один из тех дней, когда я был занят работать над новыми функциями для моего офисного проекта. Всё, что-то привлекло мое внимание: окончательное представило DOM в Angular. Хм… Если они содержат элементы

Это был один из тех дней, когда я был занят работать над новыми функциями для моего офисного проекта. Внезапно, что-то привлекло мое внимание:

При проверке дома я увидел NGContent применяется на элементах угловой. Хм … Если они содержат элементы в конечном доме, то каково использование ? В то время я запутался между и Отказ

В стремлении узнать ответы на мои вопросы, я обнаружил концепцию Отказ К моему удивлению, было также * ngtemblateoutlet. . Я начал свое путешествие ищет ясность около двух концепций Но теперь у меня было четверо из них, звучал почти одинаково!

Вы когда-нибудь были в этой ситуации? Если да, то вы находитесь в нужном месте. Так что без дальнейшего ADO давайте возьмем их один за другим.

1.

Как название предполагает это элемент шаблона, который угловые использует со структурными директивами ( * NGIF , * NGFOR , [ngswitch] и пользовательские директивы).

Эти шаблонные элементы работают только в присутствии структурных директив Отказ Угловые обертывания хост-элемент (к которому применяется Директива) внутри и потребляет В готовом доме, заменив его диагностическими комментариями.

Рассмотрим простой пример * NGIF :

Показано выше, это угловая интерпретация * NGIF. . Угловой укладывает элемент хоста, на который применяется Директива в пределах и держит хозяин как есть. Последний Дом похож на то, что мы видели в начале этой статьи:

Использование:

Мы видели, как использует угловые Но что, если мы хотим его использовать? Поскольку эти элементы работают только со структурной директивой, мы можем написать как:

Здесь Главная это логический Свойство компонента, установленного на правда ценить. Выход вышеуказанного кода в DOM:

Ничего не оказалось!:(

Но почему мы не можем увидеть наше сообщение даже после использования правильно со структурной директивой?

Это был ожидаемый результат. Как мы уже обсуждали, угловые заменяет с диагностическими комментариями. Без сомнения, приведенный выше код не будет генерировать никакой ошибки, так как угловой – отлично отлично с вашим корпусом использования. Вы бы никогда не узнали, что именно произошло за кулисами.

Давайте сравним выше, два домена, которые были отображены угловыми:

Если вы внимательно следите, есть один Дополнительный комментарий Тег В последней доме Пример 2 Отказ Код, который интерпретирован угловой, был:

Угловой завершил ваш хост в течение другого и преобразован не только внешний Для диагностических комментариев, но и внутренняя! Вот почему вы не могли видеть никакого вашего сообщения.

Чтобы избавиться от этого, есть два способа получить желаемый результат:

Метод 1:

В этом способе вы предоставляете угловую с помощью формата Sugared, который не нуждается в дальнейшей обработке. На этот раз угловые будут преобразовать только К комментариям, но оставляет контент внутри него нетронутым (они больше не в любом Как они были в предыдущем случае). Таким образом, он сделает контент правильно.

Чтобы узнать больше о том, как использовать этот формат с другими структурными директивами, обратитесь к этому Статья Отказ

Способ 2:

Это довольно невидимый формат и используется редко (используя два брата ). Здесь мы даем шаблон ссылки на * NGIF в его тогда Чтобы сказать это, какой шаблон должен использоваться, если условие является правдой.

Используя несколько Таким образом, не рекомендуется (вы можете использовать вместо этого) Как это не то, что они предназначены для. Они используются в качестве контейнера к шаблонам, которые можно повторно использовать в нескольких местах. Мы рассмотрим больше на этом в более позднем разделе этой статьи.

2.

Вы когда-нибудь написали или видели код, напоминающие это:

Причина, по которой многие из нас написали этот код – это неспособность использовать несколько структурных директив на одном элементе хоста в угловом угловом углу. Теперь этот код работает нормально Но это вводит несколько дополнительных пустых

в доме, если item.id это ложное значение, которое может потребоваться не требуется.

Никто не может быть обеспокоен для простого примера, такой как это, но для огромного приложения, которое имеет сложный DOM (для отображения десятков тысяч данных), это может стать проблематичным, поскольку элементы могут иметь прикрепленные к ним слушатели, которые все равно будут в Дом слушает события.

Что еще хуже, это уровень гнезда, который вы должны сделать, чтобы применить ваш стиль (CSS)!

Нет забот, у нас есть в помощь!

Угловой это группирующий элемент, который не мешает стилям или макету, потому что угловые не помещает его в DOM Отказ

Так Если мы пишем наши Пример 1 с :

Мы получаем последний дом как:

Видите, мы избавились от тех пустых

с. Мы должны использовать Когда мы просто хотим применить несколько структурных директив без внедрения какого-либо дополнительного элемента в нашем доме.

Для получения дополнительной информации обратитесь к документы . Есть еще один случайный случай, когда он используется для динамического введения шаблона в страницу. Я охвачу этот случай в последнем разделе этой статьи.

3.

Они используются для создания настраиваемых компонентов. Это означает, что компоненты могут быть настроены в зависимости от потребностей его пользователя. Это хорошо известно как Проекция контента Отказ Компоненты, которые используются в опубликованных библиотеках, используются сделать себя настраиваемым.

Рассмотрим простой <Проектный контент> составная часть:

Контент HTML, переданный в пределах открытия и закрытия тегов <Проектный контент> Компонент – это контент, который будет проецироваться. Это то, что мы называем Проекция контента Отказ Содержание будет отображаться внутри в компоненте. Это позволяет потребителю <Проектный контент> Компонент для прохождения любых пользовательских нижних колонтитулов в компоненте и контроля точно Как они хотят, чтобы это было оказано.

Несколько проекций:

Что, если вы можете решить, какой контент должен быть размещен где? Вместо каждого контента, проецируемого внутри одного , вы также можете контролировать, как содержимое будет проецироваться с Выберите атрибут Отказ Требуется селектор элемента для решения того, какой контент проектировать внутри конкретного Отказ

Вот как:

Мы изменили <Проектный контент> Определение для выполнения проецирования нескольких контентов. Выберите атрибут выбирает тип содержимого, который будет отображаться внутри определенного Отказ Здесь у нас есть первый Выберите регларировать заголовок H1 элемент. Если проецируемый контент не имеет H1 Элемент это не сделает ничего. Точно так же второй Выберите ищет Div Отказ Остальная часть контента отображается внутри последнего без Выберите Отказ

Вызов компонента будет выглядеть так:

4. * ngtemplateoutlet.

Это раздел, в котором мы обсудим вышеприведенные два пункта, упомянутые ранее. * ngtemplateOutlet Используется для двух сценариев – вставить общий шаблон в различных разделах вида независимо от петель или состояния и сделать высоко настроенную компонент.

Шаблон повторного использования:

Рассмотрим мнение, где вы должны вставить шаблон в нескольких местах. Например, логотип компании для размещения на сайте. Мы можем добиться этого, написав шаблон для логотипа один раз и повторно использую его везде в виду.

Ниже приведен фрагмент кода:

Как вы можете видеть, мы просто написали шаблон логотипа один раз и использовали его три раза на одной странице с одной линейкой кода!

* ngtemplateOutlet Также принимает объект контекста, который может быть передан для настройки общего выхода шаблона. Для получения дополнительной информации о объекте контекста относятся к официальному Документы Отказ

Настраиваемые компоненты:

Второе место для * ngtemplateOutlet это очень индивидуальные компоненты. Рассмотрим наш предыдущий пример <Проектный контент> Компонент с некоторыми модификациями:

Выше это модифицированная версия <Проектный контент> Компонент, который принимает три входных свойства – Teadertemplate , шаблон тела , Footertemplate Отказ Ниже приведен фрагмент для Проект-контент :

То, что мы пытаемся достичь вот – показать заголовок, тело и нижнее колонтитуру, полученные от родительского компонента <Проектный контент> Отказ Если какой-либо из них не предоставлен, наш компонент покажет шаблон по умолчанию на своем месте. Таким образом, создание очень индивидуальной компоненты.

Чтобы использовать наш недавно измененный компонент:

Вот как мы собираемся пройти шаблон Refs к нашему компоненту. Если какой-либо из них не передается, то компонент окажет шаблон по умолчанию.

NG-Content vs. * ngtemplateoutlet

Они оба помогают нам добиться высоко индивидуальных компонентов, но которые на выбор и когда?

Это может быть ясно видно что * ngtemplateOutlet Дает нам еще немного мощности отображения шаблона по умолчанию, если ни один не предоставляется.

Это не так с NG-Content Отказ Это делает контент как есть. На максимуме вы можете разделить контент и сделать их в разных местах вашего представления с помощью Выберите атрибут. Вы не можете условно сделать контент внутри NG-Content Отказ Вы должны показать контент, который получен от родителя, не означает принятия решений на основе содержания.

Тем не менее, выбор выбора среди двух полностью зависит от случая использования. По крайней мере, теперь у нас есть новое оружие * ngtemplateOutlet В нашем арсенале, который обеспечивает больше контроля на содержании в дополнение к функциям NG-Content Действительно

Оригинал: “https://www.freecodecamp.org/news/everything-you-need-to-know-about-ng-template-ng-content-ng-container-and-ngtemplateoutlet-4b7b51223691/”