我正在寫一個複選框的自定義角組件屬性。該組件呈現一個複選框標籤和一個標籤標籤。複選框的「id」屬性和標籤的「for」屬性都設置爲組件的id
屬性(組件的@Input
),以確保單擊標籤將切換複選框。模板的簡化版本是這樣的:
<div class="checkbox">
<input type="checkbox" [id]="id" />
<label [for]="id"><ng-content></ng-content></label>
</div>
問題
當我設置一個「id」我的組件上支撐(例如<my-checkbox id="hello">Check me</my-checkbox>
),一個「id」屬性會自動對組件設置封裝標籤在DOM中。這會導致DOM中重複的id,因爲我已經在組件內的複選框上設置了「id」屬性。這是無效的,並且打破瀏覽器的默認切換標籤行爲。 DOM的輸出是:
<my-checkbox id=「my-checkbox」 ng-reflect-id=「my-checkbox」 ng-reflect-checked="true">
<div ng-reflect-ng-class="[object Object]" class="checkbox">
<input class="checkbox__element" type="checkbox" name="fire_missiles" ng-reflect-id=「my-checkbox」 id=「my-checkbox」 value=「fire_missiles」 ng-reflect-checked="true">
<label class="checkbox__label" ng-reflect-html-for=「my-checkbox」 for=「my-checkbox」>
Fire missiles?
</label>
</div>
</my-checkbox>
是否有到任何一個)擺脫垃圾容器標籤的方式或b)停止「ID」的自動反射支撐在容器上作爲一個屬性?
注意:使用應用於div之類的屬性選擇器沒有幫助,它只是將額外的「id」從<my-checkbox />
移動到div。
謝謝!
你爲什麼不稍微改變複選框的'id', '「和」
這是迄今爲止我見過的最乾淨的解決方案,謝謝。發佈它作爲答案,我會接受。 – Elliot