다음과 같이 Bootstrap의 마크 업을 사용하는 양식이 있습니다.
<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>
다음과 같이 새로운 지시문 (form-input)으로 줄이고 싶은 많은 상용구 코드가 있습니다.
<form-input label="Name" form-id="nameInput"></form-input>
생성 :
<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>
저는 간단한 템플릿을 통해이 정도 작업을합니다.
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>'
}
})
그러나 더 많은 고급 기능을 추가해야 할 때가 있습니다.
템플릿에서 기본값을 지원하려면 어떻게해야합니까?
내 지시문의 선택적 속성으로 "type"매개 변수를 노출하고 싶습니다. 예 :
<form-input label="Password" form-id="password" type="password"/></form-input>
<form-input label="Email address" form-id="emailAddress" type="email" /></form-input>
그러나 아무것도 지정하지 않으면 기본값으로 "text"
. 어떻게 지원할 수 있습니까?
속성 유무에 따라 템플릿을 사용자 정의하려면 어떻게해야합니까?
"필수"속성이있는 경우 지원할 수 있기를 바랍니다. 예 :
<form-input label="Email address" form-id="emailAddress" type="email" required/></form-input>
경우 required
지시문에 존재하는, 내가 생성에 추가하고 싶습니다 <input />
출력에, 그렇지 않으면 그것을 무시합니다. 이것을 달성하는 방법을 잘 모르겠습니다.
이러한 요구 사항이 단순한 템플릿을 넘어서서 사전 컴파일 단계를 사용해야한다고 생각하지만 어디에서 시작해야할지 모르겠습니다.
type
예를 들어 바인딩을 통해 동적으로 설정 되면 어떨까요?type="{{ $ctrl.myForm.myField.type}}"
? 아래의 모든 방법을 확인했지만이 시나리오에서 작동하는 솔루션을 찾을 수 없습니다. 템플릿 함수는 예를 들어 속성의 리터럴 값 을 볼 것 같습니다 .tAttr['type'] == '{{ $ctrl.myForm.myField.type }}'
대신tAttr['type'] == 'password'
. 나는 의아해합니다.