[Vuejs] DB์์ ๋ฐ์์จ ํจ์ ๋ช ์ v-on:click์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ
ํ๋ฉด์ ๋ํ ๊ทธ๋ฆฌ๋์ ๋ชจ๋ ์์ฑ ์ ๋ณด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ด๋ฆฌํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
๊ทธ๋ฆฌ๋์ ํค๋, ์ปฌ๋ผ ๋ฐ์ดํฐ, 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() ์ฐ๊ธฐ~