Tôi có một biểu mẫu đang sử dụng đánh dấu từ Bootstrap, như sau:
<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>
Có rất nhiều mã soạn sẵn trong đó, mà tôi muốn giảm xuống thành một chỉ thị mới - form-input, như sau:
<form-input label="Name" form-id="nameInput"></form-input>
tạo ra:
<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>
Tôi có nhiều thứ này làm việc thông qua một mẫu đơn giản.
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>'
}
})
Tuy nhiên, khi tôi bổ sung thêm các chức năng nâng cao thì tôi lại gặp khó khăn.
Làm cách nào để hỗ trợ các giá trị mặc định trong mẫu?
Tôi muốn hiển thị tham số "type" dưới dạng thuộc tính tùy chọn trên chỉ thị của mình, ví dụ:
<form-input label="Password" form-id="password" type="password"/></form-input>
<form-input label="Email address" form-id="emailAddress" type="email" /></form-input>
Tuy nhiên, nếu không có gì được chỉ định, tôi muốn để mặc định thành "text"
. Tôi có thể hỗ trợ điều này như thế nào?
Làm cách nào để tùy chỉnh mẫu dựa trên sự hiện diện / vắng mặt của các thuộc tính?
Tôi cũng muốn có thể hỗ trợ thuộc tính "bắt buộc", nếu thuộc tính này có mặt. Ví dụ:
<form-input label="Email address" form-id="emailAddress" type="email" required/></form-input>
Nếu required
có trong chỉ thị, tôi muốn thêm nó vào giá trị được tạo <input />
trong đầu ra và bỏ qua nó nếu không. Tôi không chắc làm thế nào để đạt được điều này.
Tôi nghi ngờ những yêu cầu này có thể đã vượt ra ngoài một khuôn mẫu đơn giản và phải bắt đầu sử dụng giai đoạn biên dịch trước, nhưng tôi không biết bắt đầu từ đâu.
type
được thiết lập động thông qua ràng buộc vd.type="{{ $ctrl.myForm.myField.type}}"
? Tôi đã kiểm tra tất cả các phương pháp bên dưới và không thể tìm thấy bất kỳ giải pháp nào sẽ hoạt động trong trường hợp này. Có vẻ như hàm mẫu sẽ thấy các giá trị theo nghĩa đen của các thuộc tính, ví dụ.tAttr['type'] == '{{ $ctrl.myForm.myField.type }}'
thay vìtAttr['type'] == 'password'
. Tôi bị bối rối.