Как привнести проверку типов в наши шаблоны 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:
И вот оно. Надеюсь, это может приземлиться в PrimeNg, так как это отличная библиотека для компов, было бы только хорошо, если бы она была родной.
Вот github для этой статьи :
GitHub - aboudard/prime-template-context-guard: Применение ngTemplateContextGuard к шаблону строки таблицы PrimeNg
А вот несколько отличных статей об использовании этой директивы в ваших собственных компонентах.
21.03.2023 12:23
Веб-разработка - это захватывающая и постоянно меняющаяся область, которая постоянно развивается благодаря новым технологиям и тенденциям. Одним из самых популярных фреймворков для веб-разработки сегодня является React.js. Если вы начинающий веб-разработчик и хотите узнать больше о React.js, это...
21.03.2023 07:56
React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые делают их подходящими для различных проектов веб-разработки.
20.03.2023 14:01
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а также новые инструменты веб-скраппинга с открытым исходным кодом для их обхода.
20.03.2023 12:24
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие действия:
20.03.2023 11:15
О тренинге HTML JavaScript :HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) - две основные технологии для создания веб-страниц. HTML обеспечивает структуру страницы CSS (визуальное и звуковое) оформление для различных устройств. Наряду с графикой и сценариями HTML и CSS являются...
20.03.2023 08:46
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?