Aşağıdaki gibi Bootstrap'ten işaretlemeyi kullanan bir formum var:
<form class="form-horizontal">
<fieldset>
<legend>Legend text</legend>
<div class="control-group">
<label class="control-label" for="nameInput">Name</label>
<div class="controls">
<input type="text" class="input-xlarge" id="nameInput">
<p class="help-block">Supporting help text</p>
</div>
</div>
</fieldset>
</form>
Burada, aşağıdaki gibi yeni bir yönergeye (form-input) indirgemek istediğim çok sayıda standart kod var:
<form-input label="Name" form-id="nameInput"></form-input>
üretir:
<div class="control-group">
<label class="control-label" for="nameInput">Name</label>
<div class="controls">
<input type="text" class="input-xlarge" id="nameInput">
</div>
</div>
Basit bir şablonla bu kadar çalışıyorum.
angular.module('formComponents', [])
.directive('formInput', function() {
return {
restrict: 'E',
scope: {
label: 'bind',
formId: 'bind'
},
template: '<div class="control-group">' +
'<label class="control-label" for="{{formId}}">{{label}}</label>' +
'<div class="controls">' +
'<input type="text" class="input-xlarge" id="{{formId}}" name="{{formId}}">' +
'</div>' +
'</div>'
}
})
Ancak, daha gelişmiş işlevler eklemeye başladığımda sıkışıp kalıyorum.
Şablondaki varsayılan değerleri nasıl destekleyebilirim?
Yönergemde "tür" parametresini isteğe bağlı bir öznitelik olarak göstermek istiyorum, örneğin:
<form-input label="Password" form-id="password" type="password"/></form-input>
<form-input label="Email address" form-id="emailAddress" type="email" /></form-input>
Ancak, hiçbir şey belirtilmezse, varsayılan olarak ayarlamak isterim "text"
. Bunu nasıl destekleyebilirim?
Özniteliklerin varlığına / yokluğuna göre şablonu nasıl özelleştirebilirim?
Ayrıca varsa "gerekli" özniteliği de destekleyebilmeyi isterim. Örneğin:
<form-input label="Email address" form-id="emailAddress" type="email" required/></form-input>
Eğer required
yönergede mevcuttur, ben oluşturulan eklemek istediğiniz <input />
çıktı ve başka türlü bunu görmezden. Bunu nasıl başaracağımdan emin değilim.
Bu gereksinimlerin basit bir şablonun ötesine geçmiş olabileceğinden ve ön derleme aşamalarını kullanmaya başlamam gerektiğinden şüpheleniyorum, ancak nereden başlayacağımı bilmiyorum.
type
Bağlama yoluyla dinamik olarak ayarlanırsa örneğin.type="{{ $ctrl.myForm.myField.type}}"
? Aşağıdaki tüm yöntemleri kontrol ettim ve bu senaryoda işe yarayacak herhangi bir çözüm bulamadım. Görünüşe göre şablon işlevi özniteliklerin değişmez değerlerini görecek , ör.tAttr['type'] == '{{ $ctrl.myForm.myField.type }}'
yerinetAttr['type'] == 'password'
. Kafam karıştı.