Создание структурных директив¶
Создадим простейшую структурную директиву. Добавим в папку src/app новый файл while.directive.ts:
Этот файл будет содержать директиву. Определим в файле следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
Структурная директива должна применять декоратор @Directive, в который передается название селектора директивы в квадратных скобках. В данном случае селектор — while.
Для получения доступа к шаблону директивы применяется объект TemplateRef. Этот объект автоматически передается в конструктор через механизм внедрения зависимостей. Кроме этого объекта в конструктор также передается объект рендерера — ViewContainerRef. Ну и с помощью применения модификатора private для обоих этих параметров автоматически будут создаваться локальные переменные, к которым мы затем сможем обратиться.
1 2 3 4 | |
С помощью входного свойства-сеттера, к которому применяется декоратор @Input, мы будем получать из вне некоторые значения, которые могут использоваться при создании разметки html. В данном случае мы получаем извне некоторое булевое значение:
1 2 3 4 5 6 7 | |
Если в данном случае condition равно true, то производим рендеринг шаблона через вызов this.viewContainer.createEmbeddedView(this.templateRef);. В итоге на веб-странице появится элемент, к которому применяется данная директива.
В обратном случае, если condition равно false, то, наоборот, удаляем элемент из разметки с помощью вызова this.viewContainer.clear().
То есть по факту мы получили аналог директивы ngIf.
Далее применим директиву в главном компоненте AppComponent:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
И далее задействуем директиву в главном модуле AppModule:
1 2 3 4 5 6 7 8 9 10 11 12 | |
И после запуска приложения с помощью этой директивы мы сможем регулировать добавление или удаление определенного блока веб-страницы:

