Vue ํ๋ก์ ํธ์์ ๊ณตํต ํจ์ ์ธํ ํ๊ธฐ
์์ํ๋ฉฐ
๋งค ํ๋ก์ ํธ๋ฅผ ๊ตฌ์ถํ ๋๋ง๋ค ํ๋ ๊ณ ๋ฏผ โ๊ณตํต ๋ชจ๋์ ์ด๋ป๊ฒ ๊ด๋ฆฌํ ๊น?โ. ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์๋ ์ด๊น์์ด ์ด ์ง๋ฌธ์ ๋ํ ๊ณ ๋ฏผ์ ํด๋ณด์๋ค. ๊ท๋ชจ๊ฐ ๊ฝค ์๋ Vue ํ๋ก์ ํธ๋ฅผ ์์ ๋จ๊ณ๋ถํฐ ์ฐธ์ฌํ๋ ๊ฒฝํ์ด ์์๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ์ํฐํด์ ์ฐพ์๋ณด์๋ค.
[ํ๊ฒฝ]
Vue2 + Nuxt.js
ํ๋ฌ๊ทธ์ธ์ผ๋ก ์์ฑํ๊ธฐ
Vue ๊ณต์๋ฌธ์์์๋ ํ๋ฌ๊ทธ์ธ์ ๋ํด ์ค๋ช
ํ๊ณ ์๋ค. ๊ณตํต์ผ๋ก ์ฌ์ฉํ js ํ์ผ์ /assets /plugins ์ด๋ ์ ํธํ๋ ๊ณณ์ ๋ง๋ค์ด์ค๋ค.
import Vue from 'vue'
import { store } from "~/store";
Vue.use(MyPlugin)
MyPlugin.install = (Vue) => {
Vue.getBlabla = () => {
return store.getBlabla
}
}์ฌ์ฉ์ ์ด๋ ๊ฒ
this.$getBlabla()ํ์
์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ง ์๋ Nuxt ํ๊ฒฝ์ด๋ผ๋ฉด ๋ค์ ๋ฐฉ๋ฒ๋ ๊ฐ๋ฅํ๋ค. Nuxt์์ ์ ๊ณตํ๋ inject ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฑด๋ฐ ์์ ์ฝ๋๋ ์๋๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋๋ค.
export default ({ app }, inject) => {
inject('getBlabla', msg => console.log(`blabla ${msg}!`))
}๋ด๊ฐ ์ ๋ฐฉ๋ฒ๋๋ก ์๋ํ๋ค๋ณด๋ Typescript์ ๋ฒฝ์ ๋ถ๋ชํ๋ค. ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์์ค๋ Vue์ ๋ํ ํ์
์ ์ง์ ํ๋ผ๊ณ ํ๋๋ฐ any๋ ์ ๋ ์ฐ๊ธฐ ์ซ์ด์ ,, ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด์๋ค.
Nuxt Typescript ๊ณต์ ๋ฌธ์์์ plugins๋ฅผ ๋ฑ๋กํ๋ ๊ฐ์ด๋๋ฅผ ์ฐพ์ ์ ์์๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฏธ๋ฆฌ ๋งํ์๋ฉด ์ด ๋ฐฉ๋ฒ์ผ๋ก ์ฑ๊ณตํ๋ค !! ๐ช๐ป Vue ์ธ์คํด์ค์ ์ฃผ์ ํ๋ ๋ฐฉ๋ฒ๊ณผ context์ ์ฃผ์ ํ๋ ๋ฐฉ๋ฒ์ด ์๋๋ฐ ๊ณตํต ํจ์๋ฅผ ๋ฑ๋กํ๋ ๊ฒฝ์ฐ์ Vue ์ธ์คํด์ค์ ์ฃผ์ ํด๋ ๋๋ค๊ณ ์๊ฐํด์ ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ผ๋ก ์งํํ๋ค.
- plugin ํ์ผ ์์ฑ
nuxt ํ๋ก์ ํธ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ์ plugins ๋ผ๋ ํด๋ ํ์์ {pluginsํ์ผ๋ช
}.ts ํ์ผ์ ์์ฑํด์ค๋ค.
import Vue from 'vue'
declare module 'vue/types/vue' {
interface Vue {
$myInjectedFunction(message: string): void
}
}
Vue.prototype.$myInjectedFunction = (message: string) => console.log(message)nuxt.config.jsํ์ผ ์์
plugins: [
...์ค๋ต...
'~/plugins/{pluginsํ์ผ๋ช
}'
],- ์ฌ์ฉ
${ํจ์๋ช
}()Refer
https://song8420.tistory.com/385?category=891243
https://kr.vuejs.org/v2/guide/plugins.html
https://typescript.nuxtjs.org/cookbook/plugins/
๋ง์น๋ฉฐ
๋ฆฌ์์น ํ ํ๋ก์ ํธ์ ์ ์ฉํ๋ ๊ณผ์ ์์ Nuxt + TypeScript์ ๋ฒฝ์ ๋ถ๋ชํ ์ ๋ฐฉ๋ฒ์ผ๋ก๋ ์คํจํ๋ค.. (์กฐ๊ธ ๋ ๋ฆฌ์์น๊ฐ ํ์ํ๋ค.)
ํจ์ ๋ชจ๋์ ๋ง๋ค๋ค๋ณด๋ ์๋์ ๊ฐ์ ๊ฐ์ ํฌ์ธํธ๋ฅผ ์ฐพ์๋ผ ์ ์์๋ค.
1. A ์ปดํฌ๋ํธ, B ์ปดํฌ๋ํธ์์ ๋์ผํ ๋ก์ง์ ๊ตฌํํด์ผํ๋ ๊ฒฝ์ฐ ์ ์ง๋ณด์๊ฐ ์ฝ๋ค.
๋์ผํ ๋ก์ง์ ๊ตฌํํด๋๊ณ ์ถํ ๋ณ๊ฒฝ์ฌํญ์ด ์๊ฒผ์ ๋ ์ปดํฌ๋ํธ์์ ๊ฐ๊ฐ์ ํจ์๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ํ ๊ณณ๋ง ๋ณ๊ฒฝํ๋ ๋ฑ ๋์น๋ ํฌ์ธํธ๊ฐ ์๊ธธ ์ ์๋ค.
2. ์ค๋ณต๋๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ๊ณ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
3. (์ถํ) ๊ฐ ๊ธฐ๋ฅ๋ณ ๊ณตํตํจ์๋ฅผ ๋ด๊ณ ์๋ plugin ํ์ผ์ ๋ง๋ ๋ค๋ฉด ํน์ ๊ธฐ๋ฅ์์ ์ฌ์ฉ๋๋ ํจ์๋ค์ ํ ํ์ผ์์ ํ์ธํ ์ ์๋ค.