๐Ÿ“ฑVue.js

[ VueJs Datepicker ] datepicker ์ด๋ฒคํŠธ ๊ด€๋ จ ๋ฌธ์ œ

harry.93 2022. 3. 16. 15:15
๋ฐ˜์‘ํ˜•

vuejs Datepicker ์‚ฌ์šฉ ์‹œ, IOS 15+ ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์—์„œ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๊ณต์œ ํ•˜๊ณ ์ž ํ•œ๋‹ค.

์ž‘์—… ์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ vuejs datepicker ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ ํ•ด๋‹น datepicker ์—๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ ์–ธ๋˜์–ด ์žˆ๋‹ค.

<vuejs-datepicker v-model="params.startDate"
	:format="$data._datepicker.format"
	:language="_getDatepickerLanguage()"
	:disabled-dates="disabledDatesFrom"
	@input="params.startDate = _formatedDatepicker($event)"
	@selected="updateDDT">
</vuejs-datepicker>

 

@input ์€ datepicker์—์„œ ๋‚ ์งœ๋ฅผ ์„ ํƒ ์‹œ, yyyy.mm.dd ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ model ์— ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๋Š” ์ด๋ฒคํŠธ์ด๋‹ค.

@selected ๋Š” datepicker์—์„œ ๋‚ ์งœ๋ฅผ ์„ ํƒํ•˜๋ฉด, ์ž๋™์ ์œผ๋กœ ๋‹ค์Œ datepicker์— disabled ์˜ต์…˜์„ ๊ฑธ์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ์ด๋ฒคํŠธ ์ด๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฐœ์ƒํ•œ ์ฒซ๋ฒˆ์งธ ๋ฌธ์ œ๋Š” ์•„๋ž˜์˜ ๋งํฌ ๋‚ด์šฉ ์ฒ˜๋Ÿผ ios date ๊ฐ€ ๋ฌธ์ œ๊ฐ€ ๋˜๋ฉด์„œ ๋ฐœ์ƒํ•œ๋‹ค.

https://lucete-stellae.tistory.com/72

 

[ IOS ] invalid Date ๊ด€๋ จ ๋ฌธ์ œ

์ตœ๊ทผ IOS ๋ชจ๋ฐ”์ผ ์•ฑ WebView ์ƒํ™ฉ์—์„œ invalid Date ๋ฌธ์ œ๋ฅผ ๊ฒช๊ฒŒ ๋˜์—ˆ๋‹ค. ์ฆ์ƒ์€, ๋‚ ์งœ ๊ฐ์ฒด๊ฐ€ ํ‘œํ˜„์ด ๋˜์ง€ ์•Š๋Š” ํ˜„์ƒ์ด๋ฉฐ, format์„ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ date ๊ณ„์‚ฐ์„ ํ•˜๋Š” ๊ณผ์ •์—์„œ ํ•ด๋‹น ํ˜„์ƒ์ด ๋ฐœ์ƒ๋˜์—ˆ๋‹ค. ์šฐ์„ 

lucete-stellae.tistory.com

 

vuejs datepicker github์„ ๋ณด๋ฉด https://github.com/charliekassel/vuejs-datepicker#readme

 

GitHub - charliekassel/vuejs-datepicker: A simple Vue.js datepicker component. Supports disabling of dates, inline mode, transla

A simple Vue.js datepicker component. Supports disabling of dates, inline mode, translations - GitHub - charliekassel/vuejs-datepicker: A simple Vue.js datepicker component. Supports disabling of d...

github.com

 

์‚ฌ์šฉ๋ฐฉ๋ฒ•์— ์•„๋ž˜์™€๊ฐ™์ด ๋‚˜์™€์žˆ๋‹ค.

USAGE 

<script>
var state = {
  date: new Date(2016, 9,  16)
}
</script>
<datepicker :value="state.date"></datepicker>

 

์ฆ‰, ์‚ฌ์šฉ ์‹œ์— ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™”๋Š” date ๊ฐ์ฒด๋กœ ํ•˜๋ผ๋Š” ๋œป์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” datepicker์— ๋ฌธ์ž์—ด๋กœ ๋œ ๋ชจ๋ธ์„ ํ†ตํ•ด ๊ฐ’์„ ์ดˆ๊ธฐํ™” ํ•˜๊ฑฐ๋‚˜ ๋ฐ”๊พธ๊ณ  ์žˆ์—ˆ๊ณ , ์ด ๋ถ€๋ถ„์—์„œ ์ „๋ถ€ invalid date๊ฐ€ ๋–จ์–ด์ ธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

๋”ฐ๋ผ์„œ, datepicker ์‚ฌ์šฉ ์‹œ์— ๋ณ€์ˆ˜๋Š” ํ•ญ์ƒ javascript date๋ฅผ ํ†ตํ•ด ์ดˆ๊ธฐํ™”ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜์˜€๋‹ค.

 

๋‘๋ฒˆ์งธ ๋ฌธ์ œ๋Š” model ์—์„œ ๋ฐœ์ƒํ–ˆ๋‹ค.

<vuejs-datepicker v-model="params.startDate"
	:format="$data._datepicker.format"
	:language="_getDatepickerLanguage()"
	:disabled-dates="disabledDatesFrom"
	@input="params.startDate = _formatedDatepicker($event)"
	@selected="updateDDT">
</vuejs-datepicker>

 

๋‹ค์‹œ, vuejs datepicker ์„ ์–ธ๋ถ€๋ฅผ ์‚ดํŽด๋ณด๋ฉด model ์˜ต์…˜์ด ์‚ฌ์šฉ๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. v-model ์˜ต์…˜์€ vuejs ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋งŽ์€ ์ด์œ  ์ค‘ ๊ฐ’์ด ๋™์ ์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ๋ Œ๋”๋ง ๋˜๋Š” ํŽ˜์ด์ง€์—์„œ ๋ณ€๊ฒฝ๋˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์˜ต์…˜์ด๋‹ค. 

๊ทธ๋ฆฌ๊ณ  datepicker ๋Š” ์‚ฌ์šฉ ์‹œ, input ์š”์†Œ๋ฅผ ํ†ตํ•ด ์„ ํƒ๋œ ๋‚ ์งœ๋ฅผ ๋ณด์—ฌ์ฃผ๊ฒŒ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— model์„ ์š”์†Œ์— ๋ฐ”์ธ๋”ฉ ํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น model ์˜ ๊ฐ’์„ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ๋‹ค.

 

์ด ๊ฒฝ์šฐ์—, datepicker ์—์„œ ๋‚ ์งœ๋ฅผ ์„ ํƒํ•˜๋ฉด @input ์ด๋ฒคํŠธ๊ฐ€ ์‹คํ–‰๋˜์–ด v-model์˜ ๊ฐ’์— ๋ณ€ํ™”๋ฅผ ์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ ์ฒซ๋ฒˆ์งธ๋กœ ์„ ํƒํ•˜๋ฉด v-model์— ๋ณ€ํ™”๊ฐ€ ์—†๊ณ , ํ•œ๋ฒˆ ๋” ์„ ํƒํ•ด์•ผ ์‹ค์ œ v-model์˜ ๊ฐ’์— ๊ฐ’์„ ํ• ๋‹นํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

ํ™•์ธํ•ด๋ณธ ๊ฒฐ๊ณผ, input ์ด๋ฒคํŠธ์—์„œ ์‹คํ–‰๋˜๋Š” _formatedDatepicker๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•˜๋‹ค.

_formatedDatepicker: function (date, format) {
	if (util.isEmpty(date)) return "";
	var f = 'YYYY.MM.DD';
	if (format) {
		if (format == 'time') f = 'HH:MM';
		else f = format;
	}
	return moment(date).format(f);
},

 

IOS date๋ฌธ์ œ์™€ ์—ฎ์—ฌ์„œ ๊ทธ๋Ÿฐ ์ค„ ์•Œ์•˜์œผ๋‚˜ ์˜์™ธ๋กœ ์ด ๋ถ€๋ถ„์€ ๋ฌธ์ œ๊ฐ€ ์—†์—ˆ๋‹ค. ๋ฌธ์ œ๋Š” 

v-model ๊ณผ @input ์—์„œ ๊ฐ™์€ model ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฌด์Šจ์ด์œ ์—์„  ์ง€ model ๋ณ€์ˆ˜ ์ชฝ์œผ๋กœ @input์—์„œ ๋ฐ”์ธ๋”ฉํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์ „๋‹ฌ์ด ์•ˆ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์˜ˆ๋กœ ์ € ๋ถ€๋ถ„์—์„œ v-model์„ ์ง€์šฐ๊ณ  ํ…Œ์ŠคํŠธ ํ•ด๋ณธ ๊ฒฐ๊ณผ ์ •์ƒ์ ์œผ๋กœ datepicker ์—์„œ ์„ ํƒํ•œ ๋‚ ์งœ ๊ฐ’์ด ํ•œ๋ฒˆ์— ๋ฐ”์ธ๋”ฉ ๋˜์—ˆ๋‹ค. v-model๋งŒ ์„ ์–ธํ•˜๋ฉด ๋‘๋ฒˆ ์„ ํƒํ•ด์•ผ ๊ฐ’์ด ์ „๋‹ฌ๋˜๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•œ ๊ฒƒ์ด๋‹ค.

 

vuejs datepicker ๋ฌธ์„œ ๋‚ด์— event ํ•ญ๋ชฉ์„ ๋ณด๋ฉด, input value๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด input ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์„ ์‹œํ‚ค๋Š”๋ฐ

input Date|null Input value has been modified

 

์—ฌ๊ธฐ์„œ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ๊ฐ€ v-model ๊ฐ’ ๋ณ€๊ฒฝ ์ด๋ฒคํŠธ๊นŒ์ง€ ๋ฐ”๋กœ ์ „๋‹ฌ์ด ์•ˆ๋˜๋Š” ๋“ฏ ํ–ˆ๋‹ค. ๋ญ”๊ฐ€ ์ค‘๊ฐ„์— ๋Š๊ธฐ๊ฑฐ๋‚˜ ํ•ด์„œ ์ฒซ๋ฒˆ์งธ ์„ ํƒํ•œ ๊ฐ’์ด ๋‘๋ฒˆ์งธ ์„ ํƒํ•  ๋•Œ v-model ์ชฝ์œผ๋กœ ์ „๋‹ฌ์ด ๋˜๋Š” ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ–ˆ๋‹ค. 

<vuejs-datepicker v-model="datepicker.from" // ๋‹ค๋ฅธ ๋ณ€์ˆ˜ ์„ ์–ธ
	:format="$data._datepicker.format"
	:language="_getDatepickerLanguage()"
	:disabled-dates="disabledDatesFrom"
	@input="params.startDate = _formatedDatepicker($event)" // v-model๊ณผ๋Š” ๋‹ค๋ฅธ ๋ณ€์ˆ˜ ์‚ฌ์šฉ
	@selected="updateDDT">
</vuejs-datepicker>

 

๋” ํŒŒ๋ณผ ์ˆ˜๋Š” ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์„œ ๊ณ ๋ฏผ์€ ์ ‘๊ณ  ๊ฒฐ๊ตญ ์ดˆ๊ธฐํ™” ๊ฐ์ฒด๋ฅผ ํ•˜๋‚˜ ๋” ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ–ˆ๋‹ค. back ๋‹จ์—์„œ ์ดˆ๊ธฐ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์ž„์‹œ ๋ณ€์ˆ˜์— ์„ธํŒ…ํ•˜๊ณ , ๋ฐ์ดํ„ฐ ์กฐํšŒ ์‹œ ์›๋ž˜ model์— ์žˆ๋˜ ๊ฐ’์— ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์˜ฎ๊ฒจ์„œ ์กฐํšŒํ•˜๋„๋ก ํ–ˆ๋‹ค. 

 

 

 

728x90
๋ฐ˜์‘ํ˜•