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

    ๋ฐ˜์‘ํ˜•

    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
    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€