typescript - Er det mulig å legge til et attributt på Angular host-element uten en verdi
Jeg prøver å gjøre host-binding til input-elementets readonly-attributt slik at det bare blir lagt til host-elementet, men ikke får noen verdi tilordnet. Slik de er ment å brukes. Jeg vet at HTML-spesifikasjonen spesifikt sier at det å tilordne det en verdi ikke vil ha noen forskjell så lenge attributtet er til stede.
Men likevel. Er det mulig å legge til et attributt uten en verdi på en eller annen måte?
Hva jeg prøvde
Siden attributter blir fjernet når de får en null-verdi, har jeg gjort dette trikset:
@HostBinding('attr.readonly')
private _readonly: '' | null = null;
public get readonly() {
return this._readonly !== null;
}
public set readonly(value: boolean) {
this._readonly = value ? '' : null;
}
Dette vil delvis fungere fordi det vil fjerne readonly-attributtet fra host-elementet når verdien er null, men når verdien er en tom streng vil dette fortsatt resultere i readonly="", noe som ikke er det jeg prøver å gjøre. Mitt ønskede resultat ville bare være readonly uten at noen verdi blir anvendt på det.
Jeg prøvde også å gjøre det samme med renderer.setAttribute, men det fungerer på samme måte.
Er det mulig da?
Her er en stackblitz å leke med.
Svar #1
Du kan oppnå dette ved å bruke @HostBinding('attr.readonly') readOnly='';
Forklaring:
- Å tilordne
''til attributtet vil bare legge til attributtet uten verdi. - Tildele
nullfor å fjerne attributtet. - Angi ikke-null-verdi, f.eks.:
trueelleryes, vil sette den tilsvarende verdien på attributtet.