텍스트 입력 필드가 있는 TimePicker에서 초 숨기기
개요
Vue.js에서 Bootstrap의 TimePicker를 이용할 때의 이야기입니다.
샘플 코드는 Vue.js 전제이지만, 논의하고 있는 기능으로서는 Bootstrap 자체의 이야기입니다.
TimePicker에서 "초 숨기기"방법을 설명합니다.
이것 자체는, 속성 「 show-seconds
」를 제외하는 것으로 실현할 수 있습니다.
ref. h tps : // 보오 tst 등 p ゔ 네. 오 rg / 드 cs / 코 m 포넨 ts / 후 rm 치메 피 c r # 에나 b ぃ
문제는 TimePicker에 "임의의 입력 필드 (직접 입력하고 싶은 요청을 위해)"를 제공하는 경우입니다. 이때 TimePicker가 반환하는 값은 "초를 포함"하므로 "입력 필드에 초가 표시"되어 버립니다. 그 때의 해결 방법을 설명합니다.
※덧붙여 UI를 브라우저 의존으로 해도 상관없다면, Input 요소의 time형을 이용하는 것이 편합니다.
그쪽은 표준이 「초는 비표시(임의로 추가)」이므로.
ref. h tps : // 보오 tst 등 p ゔ 네. 오 rg / 드 cs / 코 m 포넨 ts / 후 rm 프 t
ref. htps : //로 ゔぇぺぺr. 모잖아. 오 rg / 자 / 도 cs / u b / HTML / 에멘 t / amp t / Chime
해결 방법
"TimePicker에 임의의 입력 필드를 제공한다"는
예를 들어, 다음과 같이 구현하는 경우입니다.
<div class="div-timepicker">
<b-input-group class="mb-2">
<b-form-input
:id="idOfTimeInput"
v-model="timeCurrent"
v-bind:state="isTimeCurrentValid"
type="text"
></b-form-input>
<b-input-group-append>
<b-form-timepicker
v-model="timeCurrent"
button-only
right
locale="ja"
:aria-controls="idOfTimeInput"
></b-form-timepicker>
</b-input-group-append>
</b-input-group>
</div>
ref. h tps : // 보오 tst 등 p ゔ 에. 오 rg / 드 cs / 코 m 포넨 ts / 후 rm 치메 피 c r # Button-on ly
이 때, b-form-timepicker
의 반환값은 「HH:MM:SS」의 형식이 됩니다.
ref. h tps : // 보오 tst 등 p ゔ 에. 오 rg / 두 cs / 코 m 포넨 ts / 후 rm - 치메 피 c r # v
이 때문에, b-form-input
의 값은 「HH:MM:SS」의 형식으로 갱신되어 버려, 「초가 표시」되어 버립니다.
이 현상은 다음 두 가지 방법으로 해결할 수 있습니다.
"TimePicker에 임의의 입력 필드를 제공한다"는
예를 들어, 다음과 같이 구현하는 경우입니다.
<div class="div-timepicker">
<b-input-group class="mb-2">
<b-form-input
:id="idOfTimeInput"
v-model="timeCurrent"
v-bind:state="isTimeCurrentValid"
type="text"
></b-form-input>
<b-input-group-append>
<b-form-timepicker
v-model="timeCurrent"
button-only
right
locale="ja"
:aria-controls="idOfTimeInput"
></b-form-timepicker>
</b-input-group-append>
</b-input-group>
</div>
ref. h tps : // 보오 tst 등 p ゔ 에. 오 rg / 드 cs / 코 m 포넨 ts / 후 rm 치메 피 c r # Button-on ly
이 때,
b-form-timepicker
의 반환값은 「HH:MM:SS」의 형식이 됩니다.ref. h tps : // 보오 tst 등 p ゔ 에. 오 rg / 두 cs / 코 m 포넨 ts / 후 rm - 치메 피 c r # v
이 때문에,
b-form-input
의 값은 「HH:MM:SS」의 형식으로 갱신되어 버려, 「초가 표시」되어 버립니다.이 현상은 다음 두 가지 방법으로 해결할 수 있습니다.
b-form-input
요소 측에 bind하는 변수를 따로 한다 본 샘플에서는 「
timeCurrent
」를 대신해 「 timeCurrentInput
」를 마련해, 그 getter시에 timeCurrent
로부터 취득하는 것으로 동기 해, setter시에 timeCurrent
에도 반영하는 것으로, 동기합니다.<div class="div-timepicker">
<b-input-group class="mb-2">
<b-form-input
:id="idOfTimeInput"
v-model="timeCurrentInput"
v-bind:state="isTimeCurrentValid"
type="text"
></b-form-input>
<b-input-group-append>
<b-form-timepicker
v-model="timeCurrent"
button-only
right
locale="ja"
:aria-controls="idOfTimeInput"
></b-form-timepicker>
</b-input-group-append>
</b-input-group>
</div>
computed : {
timeCurrentInput: {
get: function () {
return (this.timeCurrent && this.timeCurrent.length > 5) ? this.timeCurrent.substr(0,5) : this.timeCurrent;
},
set: function (newTime) {
this.timeCurrent = (newTime && newTime.length == 5) ? newTime + ":00" : newTime;
}
},
}
이상입니다.
P.S. 정말 이런 해결 방법으로 좋은거야? 더 스마트한 방법(input 요소 측에 옵션 붙이는 것만, 라든지)이 있는 것은?
Reference
이 문제에 관하여(텍스트 입력 필드가 있는 TimePicker에서 초 숨기기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hoshimado/items/67ad2fe0a1490a83a049텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)