USADO Directivas de Angle Paradider Componentes de Terceros


Traducción en español del artículo original de Tim Deschryver publicado el 11 marzo 2022


Las Directivasエヌ角息子ポコUSADAS y yoクレオque esポーque nosotrosなしsabemos todoデlo息子容量デハッカー.SIの利用について*ngIf YngFor , Do pero deberは、tu c didi contener Directivas Propiasを引きます?
<研究ノート> Ea Pregunta Es Provablementte que no , y si en caso de , t rano Lo
エヌ・アーツ・アート『カロ、ヨー・キエロ・モストラート・ウー』について
Vamos A Mirar el Ejplo :

ディレクティブ


En mi proyecto usamos EL成分p-calendar デPrimeng y como podemosは、エルSiguiente C通digo seカダvezを撃退します.
<p-calendar
  [(ngModel)]="date"
  required
  id="date"
  name="date"
  dateFormat="dd/mm/yy"
  [showIcon]="true"
  [showButtonBar]="true"
  [monthNavigator]="true"
  [yearNavigator]="true"
  yearRange="1900:2050"
  [firstDayOfWeek]="1"
>
</p-calendar>
エステマークアップは、RequeridoパラConfigurerエルComponenteデルmodo que queremos por defectoに行きます.y si me prepretas que todo este c di digo no no no unsucia el c c didigo,ino tambi are n confunde y enga her a,haciendo creer que las cosas son m s s s complete jo de lo que son en realidadヨーグ・プエット・オルヴィダール( O - Saber que Tengo ) que Agregar un Atributo alp-calendar y este se comportaデotra manera para el usuario
アデムは、s、cuandoエル構成要素、明快さ、カンビアo Agrega Un Nuevop-calendar エヌNuestro cは、digoです.エヌ再開、esto tiene impactoエヌnuestros開発者y tambi es n en en los usualia.
Cuando Nosotros Lethfactorizamos EL C Directiva Analzazando Nuna Directiva、Elテンプレートse Vuelve m s s単純なy nos aseguramos de siempre brindar la misma periencia al usuario
最後のセリア
<p-calendar [(ngModel)]="date" required id="date" name="date"></p-calendar>
ペルーコモヘーゼルパスド14 14 l nea de html a nicamente una,la respuesta es usando una directiva
エル・セレクターp-calendar , パラ・バスカーp-calendar E ineectamos EL Calendar en a la Directiva , Configuru nno como nosotros necesitamos
calendar.directive.ts
import { Directive } from '@angular/core';
import { Calendar } from 'primeng/calendar';

@Directive({
    selector: 'p-calendar',
})
export class CalenderDirective {
    constructor(private calendar: Calendar) {
        this.calendar.dateFormat = 'dd/mm/yy';
        this.calendar.showIcon = true;
        this.calendar.showButtonBar = true;
        this.calendar.monthNavigator = true;
        this.calendar.yearNavigator = true;
        this.calendar.yearRange = '1900:2050';
        this.calendar.firstDayOfWeek = 1;
    }
}

カンビダンドラコンフィギュレーション


ヘーゼル・クレド・アパリカの構成<p-calendars , Pero Podemos Tener Algは、caso que esto no aplique、para eso podemos sobreescribir los valores predefinidosエヌaquellos que reneren algo diferenteです.
ElエルSiguiente Ejprao、Podos os desactivar la opciは、Navegaciのnを表します.
<p-calendar [monthNavigator]="false" [yearNavigator]="false"></p-calendar>

ディレクティブ


スペイン語から見たスペイン語の語彙と動詞の意味
POR Ejploo , Tenemos un dropdown que tiene un contrato genes rico y queremos afectar solos losについてp-dropdown[codes] , Estos pueden ser設定Noar que tenemos el atributocodes エヌエルセレクターパラは、Nicamente AfectarエステElemementosを得ます.
import { Directive, OnInit } from '@angular/core';
import { Dropdown } from 'primeng/dropdown';
import { sortByLabel } from '@core';

@Directive({
    selector: 'p-dropdown[codes]',
})
export class CodesDropdownDirective implements OnInit {
    constructor(private dropdown: Dropdown) {
        this.dropdown.optionLabel = 'label';
        this.dropdown.optionValue = 'key';
        this.dropdown.showClear = true;
    }

    public ngOnInit(): void {
        this.dropdown.options = [...this.dropdown.options].sort(sortByLabel);
        if(this.dropdown.options.length > 10) {
            this.dropdown.filter = true;
            this.dropdown.filterBy = 'label';
            this.dropdown.filterMatchMode = 'startsWith';
        }
    }
}
デestaマララ,ニクアメリスロスp-dropdown queテンガエルアトリビュートcodes , <研究ノート>スペイン語におけるスペイン語とスペイン語codes .
<p-dropdown [(ngModel)]="favoriteSport" codes required id="sport" name="sport"></p-dropdown>

ディレクティブ


Otra es Agregar EL擬似セレクタ:not() , エヌNuestra Directiva、パラque ApliqueラConfigaci i nパラシュートresetDropdown .
<武井>codes アル90 %デロスElementtos、オトラマナーラソロagregarラDirectiva l 10 % restante.
エヌVez usarエルAtributocodes パラマルカーロスDropdown、nosotros asumimos que es el comporamiento por defecto、pero usando elresetDropdown Per excluir el comportamiento
import { Directive, OnInit } from '@angular/core';
import { Dropdown } from 'primeng/dropdown';
import { sortByLabel } from '@core';

@Directive({
    selector: 'p-dropdown:not(resetDropdown)',
})
export class CodesDropdownDirective implements OnInit {
    constructor(private dropdown: Dropdown) {
        this.dropdown.optionLabel = 'label';
        this.dropdown.optionValue = 'key';
        this.dropdown.showClear = true;
    }

    public ngOnInit(): void {
        this.dropdown.options = [...this.dropdown.options].sort(sortByLabel);
        if(this.dropdown.options.length > 10) {
            this.dropdown.filter = true;
            this.dropdown.filterBy = 'label';
            this.dropdown.filterMatchMode = 'startsWith';
        }
    }
}
enエルhtml、emplearは、デla siguiente maneraです.
<!-- Usando la directiva codes por defecto -->
<p-dropdown [(ngModel)]="favoriteSport" required id="sport" name="sport"></p-dropdown>
<!-- Excluyendo el p-dropdown porque contiene el atributo resetDropdown -->
<p-dropdown
  [(ngModel)]="preference"
  resetDropdown
  required
  id="preference"
  name="preference"
></p-dropdown>

Directivasパラシュートで降下する人Cargar Datos


<研究ノート>ポートランド・ハッサーの研究について
エステes muyは、パラシュートで降下して、se datasources que se repiten o seを利用します.
エヌ・エル・シグヌーテの思想countries , Las Dropdown que利用によるパラHacer el結合countries COMOデータソースエステDirectiva puede usarseは、anidadas詐欺Otras@Ouput() パラEmiltir un Evento Cuando Los国Estは、Cargadosです.
import { Directive, EventEmitter, OnInit, Output } from '@angular/core';
import { Dropdown } from 'primeng/dropdown';
import { GeoService, sortByLabel } from '@core';

@Directive({
    selector: 'p-dropdown[countries]',
})
export class CountriesDropdownDirective implements OnInit {
    @Output() loaded = new EventEmitter<ReadonlyArray<Countries>>();

    constructor(private dropdown: Dropdown, private geoService: GeoService) {}

    public ngOnInit(): void {
        this.geoService.getCountries().subscribe((result) => {
            this.dropdown.options = result.map((c) => ({ label: c.label, key: c.id })).sort(sortByValue);
            this.loaded.emit(this.dropdown.options);
        });
    }
}
Ahora usamosラDirectiva
<p-dropdown
  [(ngModel)]="country"
  countries
  required
  id="country"
  name="country"
  (loaded)="countriesLoaded($event)"
></p-dropdown>
`

再開する


Las Directivasデ角息子ムイPoderosas、pero tristementeポコ利用者.
カムプレーン・コンprincipio Open-closed . <研究ノート>セラダリオ・パラ修飾物について
POR EJPLATO , CON LAS Directivas as Podemos Modificar el Comportamiento de Terceros O de Nuna Librer ' s que que Tenemos - Access al C - c dididel del enente
Es Cierto que Podemos Lograr Lo Mismo Empleando un Componedor y Componentes que Theenes Configativiones完成度
第二次世界大戦の構成要素としてのスペイン語の集合体について

Thanks to


オピニ


Las siguientes lineas no son parte del post original.


デスミプントデビスタ、利用可能なLas Directivas Nos permite Mucha Flexbilidad al Trabajar con構成要素としてのTerceros Lograrカプセル化Ciertos Casos罪Modificer el Comportamientoオリジナル.
La ParteデCargar Datos usando una Directiva es algo muy poderoso y hace muy柔軟なNuestro Cは、digoをします.
写真でEthan Robertson on Unsplash