๐Ÿ“• Language/Vue

[Vuejs] DB์—์„œ ๋ฐ›์•„์˜จ ํ•จ์ˆ˜ ๋ช…์„ v-on:click์— ์ ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

a n u e 2022. 7. 13. 10:57

 

 

ํ™”๋ฉด์— ๋Œ€ํ•œ ๊ทธ๋ฆฌ๋“œ์˜ ๋ชจ๋“  ์†์„ฑ ์ •๋ณด๋ฅผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค.

๊ทธ๋ฆฌ๋“œ์˜ ํ—ค๋”, ์ปฌ๋Ÿผ ๋ฐ์ดํ„ฐ, CSS class๋ช…, width/align ๊ฐ’, ํด๋ฆญ ์ด๋ฒคํŠธ ์‹œ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜ ๋ช… ๊นŒ์ง€ .. !!

vue ํŒŒ์ผ์— ๊ทธ๋ฆฌ๋“œ์˜ ํ—ค๋”์™€ ์ปฌ๋Ÿผ ๊ฐœ์ˆ˜๋งŒํผ ์ผ์ผํžˆ ํƒœ๊ทธ๋ฅผ ์ ๊ณ ์‹ถ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ด ๊ทธ ์ด์œ ๋‹ค. ๐Ÿ˜‡ .. ใ…Ž

 

๋ชจ๋“  ์ƒํ™ฉ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์„๊นŒ ์˜๋ฌธ์€ ๋“ค์—ˆ์ง€๋งŒ ์ผ๋‹จ ํ•ด๋ณด๊ธด ํ–ˆ๋Š”๋ฐ

ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ axios๋กœ ๋ฐ›์•„์™€์„œ, ๊ฐ์ฒด์— ๋‹ด๊ณ  v-if ๋ฒ”๋ฒ…์œผ๋กœ ๋ฃจํ”„๋ฅผ ๋Œ๋ฆฌ๋‹ˆ๊นŒ ๊ฐ ์ปฌ๋Ÿผ์˜ ์ผ€์ด์Šค์— ๋งž๊ฒŒ ์ •์ƒ์ ์œผ๋กœ ๋‚˜์˜ค๊ธด ํ–ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ, ๋”ฑ ํ•˜๋‚˜๊ฐ€ ์ œ๋Œ€๋กœ ์ ์šฉ์ด ๋˜์ง€ ์•Š์•˜๋Š”๋ฐ, ๋ฐ”๋กœ ํด๋ฆญ ์‹œ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜ ๋ช…์ด๋‹ค.

์ € ๊ฐ’์ด ๊ทธ๋ƒฅ ์ŠคํŠธ๋ง ์ฒ˜๋ฆฌ ๋˜์–ด๋ฒ„๋ ค์„œ, ์ธ์‹์„ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™์•˜๋‹ค.

eval์„ ๋ฐ”๋กœ ์จ๋ณด์•„๋„ ์•ˆ๋จน์–ด์„œ, ํ•˜๋‚˜ ๊ฑด๋„ˆ ํ˜ธ์ถœํ–ˆ๋”๋‹ˆ ๋จน๋Š” ๋ชจ์–‘์ด๋‹ค.

 

(X)
<button type="button" v-on:click="cItem.clickFnName(cell.item)">{{ cell.item[cItem.binding] }}</button>

(X)
<button type="button" v-on:click="eval(cItem.clickFnName)(cell.item)">{{ cell.item[cItem.binding] }}</button>

(O)
<button type="button" v-on:click="findLinkFun(cItem.clickFnName, cell.item)">{{ cell.item[cItem.binding] }}</button>

.
.
.

const findLinkFun = (fnName, seqNo) => {
  eval(fnName)(seqNo);
}

๊ทธ๋ฆฌ๊ณ , ํ•ด๋‹น ์˜์—ญ์„ ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ๋กœ ๋นผ์„œ ๋ชจ๋“  ํ™”๋ฉด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค.

์šฐ์„  ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋”ฐ๋กœ ๋บ€ ๋’ค, ๋ถ€๋ชจ์—์„œ ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ๋กœ props๋กœ ๋ณด๋‚ด์•ผ ํ•  ํ•ญ๋ชฉ์„ ์ง€์ •ํ–ˆ๋‹ค.

๋‹ค๋ฅธ ํŠน์ด์ ์€ ์—†์—ˆ๊ณ , ๋Œ€๊ฐœ ํ™”๋ฉด๋งˆ๋‹ค DB์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” URL๋งŒ ๋‹ค๋ฅด๋ฏ€๋กœ ํ•ด๋‹น ํ•ญ๋ชฉ๋งŒ props๋กœ ๋ฐ›์•˜๋‹ค.

(์ดˆ๋ฐ˜์— ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ณ„์† props๋ฅผ ๋ชป ์ฐพ์•˜๋Š”๋ฐ, setup์— props๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„ฃ์ง€ ์•Š์•„์„œ ๊ทธ๋Ÿฐ๊ฑฐ์˜€๋‹ค.)

๋˜ํ•œ, ๋ถ€๋ชจ์—์„œ ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ๋กœ ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋‚ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— emit๋กœ ์ด๋ฒคํŠธ ๋ช…๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์•˜๋‹ค.

 

ํ•ด๋‹น ํ™”๋ฉด์—๋Š” ๊ทธ๋ฆฌ๋“œ๊ฐ€ 3๊ฐœ๊ฐ€ ๋ถ™์–ด์žˆ์–ด์„œ ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ๋งŽ์•˜๋Š”๋ฐ

DB์—์„œ ๋ฐ›์•„์˜ค๋ฉด์„œ ๋ฃจํ”„๋ฅผ ๋Œ๋ฆฌ๊ณ , ๊ทธ ์˜์—ญ๋งˆ์ €๋„ ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋‹ˆ๊นŒ ๋ฐฑ ์ค„์˜ ์ฝ”๋“œ๊ฐ€ ๋‹จ ์—ด ์ค„๋กœ ์ค„์–ด๋“ค์—ˆ๋‹ค.

 

+) eval ์“ฐ์ง€๋ง๊ณ , new Fucntion() ์“ฐ๊ธฐ~