Шаблоны Angular PrimeNg

RedDeveloper
26.01.2023 14:14
Шаблоны Angular PrimeNg

Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной функции ngTemplateOutlet.

Это просто применение существующего контента от Josh Morony . Он снял видео об этом здесь , видео основано на самом PR.

Видео Josh посвящено созданию собственного компонента Table и его настройке с помощью всех инструментов, которые предоставляет Angular, например, знаменитого ngTemplateOutlet.

Здесь мы хотим применить этот метод к существующей библиотеке компонентов, которой является PrimeNg Table. В дальнейшем мы сможем использовать этот метод с любым компонентом PrimeNg, который использует ng-template для настройки.

Итак, для начала мы создадим новое приложение Angular.

ng new prime-template-context-guard --style scss --routing

Теперь мы просто устанавливаем PrimeNg

npm i primeng@14 primeicons@6

И применяем css PrimeNg в angular.json

"styles": [
    "src/styles.scss",
    "node_modules/primeicons/primeicons.css",
    "node_modules/primeng/resources/themes/lara-light-blue/theme.css",
    "node_modules/primeng/resources/primeng.min.css"
 ],

Затем мы создаем простую таблицу внутри компонента:

<p-table [value] = "products" [tableStyle] = "{'min-width': '50rem'}">
  <ng-template pTemplate = "header">
      <tr>
          <th>Code</th>
          <th>Name</th>
          <th>Category</th>
          <th>Quantity</th>
      </tr>
  </ng-template>
  <ng-template pTemplate = "body" let-product>
      <tr>
          <td>{{product.code}}</td>
          <td>{{product.name}}</td>
          <td>{{product.category}}</td>
          <td>{{product.quantity}}</td>
      </tr>
  </ng-template>
</p-table>

Теперь, основываясь на том, что мы узнали из видео и официальной документации Angular , мы создаем директиву, которая будет использовать ngTemplateContextGuard :

ng g directive directives/table-row

В директиве мы планируем потреблять данные, инжектированные в компонент p-table, и использовать их для типизации контекста ng-шаблона. Поэтому мы создадим интерфейс для этого контекста, а директива будет раскрывать статический метод ngTemplateContextGuard :

import { Directive, Input } from '@angular/core';

interface TableRowTemplateContext<Titem extends object> {
  $implicit: Titem;
}

@Directive({
  selector: 'ng-template[appTableRow]'
})
export class TableRowDirective<Titem extends object> {

  @Input('appTableRow') items!: Titem[];

  static ngTemplateContextGuard<TContextItem extends object>(
    dir: TableRowDirective<TContextItem>,
    ctx: unknown
  ): ctx is TableRowTemplateContext<TContextItem> {
    return true;
  }

}

Мы применяем директиву к соответствующему ng-шаблону в p-таблице:

<ng-template [appTableRow] = "products" pTemplate = "body" let-product>

И тогда мы имеем именно то, что нам нужно: строго типизированные контекстные данные в компоненте PrimeNg Table:

И тогда мы имеем именно то что нам нужно строго типизированные контекстные данные вType checking for Angular ng-template.

И вот оно. Надеюсь, это может приземлиться в PrimeNg, так как это отличная библиотека для компов, было бы только хорошо, если бы она была родной.

Вот github для этой статьи :

GitHub - aboudard/prime-template-context-guard: Применение ngTemplateContextGuard к шаблону строки таблицы PrimeNg

А вот несколько отличных статей об использовании этой директивы в ваших собственных компонентах.

  • NgTemplateOutlet Type Checking
  • Сильно типизированный ngTemplateOutlet
Руководство для начинающих по веб-разработке на React.js
Руководство для начинающих по веб-разработке на React.js

21.03.2023 12:23

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

Разница между Angular и React
Разница между Angular и React

21.03.2023 07:56

React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые делают их подходящими для различных проектов веб-разработки.

Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit

20.03.2023 14:01

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

Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра

20.03.2023 12:24

Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие действия:

ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023

20.03.2023 11:15

О тренинге HTML JavaScript :HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) - две основные технологии для создания веб-страниц. HTML обеспечивает структуру страницы CSS (визуальное и звуковое) оформление для различных устройств. Наряду с графикой и сценариями HTML и CSS являются...

Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular

20.03.2023 08:46

Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?