๋ฐ์ํ
๐ก watch ์์ฑ
- data์ ๋ณํ์ ๋ฐ๋ผ์ ํน์ ๋ก์ง์ ์คํ
- ์ฐ์ vue ์ธ์คํด์ค ๋ด๋ถ์ ๋ค์ด๊ฐ๋ ์์ฑ ์์
- el, data, watch, methods ๋ฑ
- watch ์์ data ๊ฐ์ธ num์ ๊ณ ์ ํด๋
- watch๋ computed๋ ๋น์ทํ ๋๋์ ๊ฐ๊ณ ์์
- ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์๋น์ค ๊ตฌํ์ ์์ด์์ ์ฐจ์ด์ ์???
- computed ๋ ๋จ์ํ ๊ณ์ฐ, ํ ์คํธ ์ ๋ ฅ ๊ฐ์ ๋ฐ์์ validation
- watch๋ ๋ฌด๊ฑฐ์, ๋งค๋ฒ ์คํ๋๋ ๊ฒ์ด ๋ถ๋ด์ค๋ฌ์ด ๊ฒ๋ค!!!!!!!!( ์ค์)
- ๊ฐ์ ๋ณํ๋ฅผ ๊ณ์ ์ถ์ ํจ
- function(newValue, oldValue) ๋ผ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ณ ์์
- this.fetchUserByNumber(newValue)
๐ก computed ์์ฑ์ ์ด์ฉํ ํด๋์ค ์ฝ๋ ์์ฑ๋ฐ
- boolean ํ์ ์ ๋ํ ๊ฐ์ ์ ๋ ๊ฒฝ์ฐ์๋ ์์ ๋ฐ์ดํ๊ฐ ํ์ ์์
- computed ์์ฑ์ผ๋ก v-bind:class=” ”
- ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ธ๋ฉ์ ์ฎ์ ์ ์์
- template ํํ์์์ ํ๋ ๊ฒ์ด ์๋๋ผ, script ํํ์์์ ํด๊ฒฐ์ด ๊ฐ๋ฅํจ
- computed๋ ํญ์ return ์ด ํ์ํจ
- computed ์์ ๋ฐ์ดํฐ ์์ฑ์ ์ ๊ทผํ๊ธฐ ์ํด์๋ , this ๋ฅผ ํ์ฉํด์ผํจ!!!!
๐ก vue cli
code
node -v
10๋ฒ์ ์ด์์ผ๋ก
npm -v
6๋ฒ์ ์ด์์ผ๋ก
npm install -g @vue/cli
vue/cli ์ค์น ( ์ธ๊ฐ์์๋ 3.8.2 ๋ฒ์ )
- global ๋ก ์ค์นํ๋ค๋ณด๋ฉด, npm ์ด ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฐ๊ธฐ ๊ถํ์ด ์์ ๊ฒฝ์ฐ, permission ์๋ฌ๊ฐ ๋ฐ์
- ์์ sudo ~~ ๋ฅผ ๋ถ์ด๊ณ ์ฝ๋๋ฅผ ๋๊ฐ์ด ๋ณต๋ถํด์ ์ฌ์ฉ
- window10 ๊ฐ์ ๊ฒฝ์ฐ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์น๋. %userprofiles\AppData\Roaming\npm\node_modules ์ ์กด์ฌ
- vue init ‘ํ๋ก์ ํธ ํ ํ๋ฆฟ ์ ํ’ ‘ํ๋ก์ ํธ ํด๋ ์์น’
- vue init webpack-simple ‘ํ๋ก์ ํธ ํด๋ ์์น’
- vue cli 2.x ๋ฒ์ ์์ ์ฝ๋
- [Vue CLI 3.x]
- vue create ‘ํ๋ก์ ํธ ํด๋ ์์น’
๐ก main.js
import vue
import app
new Vue({
render : h => h(App),
}).$mount('#app')
- element์ธ id๊ฐ app์ธ ์น๊ตฌํํ ๋ถ์ด๋ ค๊ณ ํ๋ ๊ฒฝ์ฐ
- ์ถ๊ฐ๋ ๊ฒ์ render์ธ๋ฐ, vue ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ๋ ํจ์์ด์, ๊ฐ๋ฐ์๋ค์ด ์ฌ์ฉํ ์ ์๋ ํจ์
- render๋ ํจ์
- template๋ฅผ ์คํํ๋ฉด render ๊ฐ ์คํ๋จ
- App์ด๋ผ๋ ์ปดํฌ๋ํธ
- import ํ๋ ์ปดํฌ๋ํธ / ์ฑ๊ธ ํ์ผ ์ปดํฌ๋ํธ / ๋ค๋ฅธ ํ์ผ์์ ๋ถ๋ฌ์์
- es6 ๋ด์ฉ์ด๊ธดํจ
- ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ฅผ h ์ ๋ฃ๊ณ render๋ฅผ ํ๋ค๊ณ ์๊ฐํ๋ฉด ํธํจ!!
- ๋ฌด์จ ๋ง์ธ์ง, ์ข ๋ ๊ณต๋ถ๋ฅผ ํ๋ฉด ์ดํดํ ์ ์์ ๊ฒ ๊ฐ๋ค.
- ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ฅผ h ์ ๋ฃ๊ณ render๋ฅผ ํ๋ค๊ณ ์๊ฐํ๋ฉด ํธํจ!!
props: {
msg : String
}
- ์์ ์ฝ๋๋ validation ์ผ๋ก ํ์ ๊น์ง ์ ํด์ค ๊ฒ
props: ['msg']
- ์ ์ฝ๋์ ๊ฐ์ ๋ด์ฉ์ด๋ค
- component ํ๊ทธ ์
๋ ฅ ๋ฐฉ๋ฒ
- kebab-case
- pascal-case : HelloWorld
- ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฌ์ฉ ๋ง์ด ํ๊ธฐ ๋๋ฌธ์
- new Vue ~~ data ๊ฐ ์๋๋ผ
- export default ์์ data: function() { return { } } ์ผ๋ก ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ฐํํด์ค์ผ ํ๋ค
new Vue({
data : {
str : 'hi'
}
})
์์ ์ฝ๋๋ ์๋์ ๊ฐ๊ฒ ๋๋๋ฐ
export default {
data: function() {
return {
str : 'hi'
}
}
}
์ฆ, html ํ ํ๋ฆฟ ๋ถ๋ถ์์ ์ฝง์์ผ ๊ดํธ {{ }} ๋ถ๋ถ์ str ์ ๋ฃ์ด์ ๊ฐ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
- ๋ฌธ๋ฒ์ด ์๊ฒฉํด์ง
- event, emit ๋ฑ๋ ๋ชจ๋ ๊ฐ๋ฅ
์ฑ๊ธ ํ์ผ ์ปดํฌ๋ํธ ์ฒด๊ณ์์ ์ปดํฌ๋ํธ ๋ฑ๋กํ๊ธฐ
- ์ปดํฌ๋ํธ ๋ฑ๋ก์ ๋ฌธ๋ฒ ์ฒด๊ณ : Pascal ๋ฌธ๋ฒ์ผ๋ก, ์ต์ ๋๋จ์ด ์ด์์ผ๋ก ์กฐํฉํ๊ธฐ!!!!!!!!
- ์ ๋๋จ์ด๋ก ์กฐํฉํ๋๊ฑฐ๋?
- ๋ง์ฝ์ main.vue ๋ผ๊ณ ๋ฑ๋กํ๋ฉด
- App.vue ์์๋ <main> </main> ์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฌ์ค๋๋ฐ
- html์ ์ด๊ฒ html ํ๊ทธ์ธ์ง ์ปดํฌ๋ํธ์ธ์ง ์ ๊ธธ์ด ์๊ธฐ ๋๋ฌธ์
- ํผ๋์ ๋ง๊ณ ์ ๋๋จ์ด ์ด์์ผ๋ก ์กฐํฉํ๋ค
- import ํ ๋ .vue ๋ฅผ ๋ถ์ฌ์ค์ผ ๊นจ์ง์ง ์๊ณ ํ์ผ์ ์ ๋ถ๋ฌ์ฌ ์ ์์
- ์ ๋๋จ์ด๋ก ์กฐํฉํ๋๊ฑฐ๋?
๐ก โฎ props ๋ฅผ ์จ๋ณด์!!
์ปดํฌ๋ํธ ๊ตฌ์กฐ
- Homeview ์๋์
- Helloworld ์ปดํฌ๋ํธ๊ฐ ์์
- props ์์ฑ์ ๋ค์๊ณผ ๊ฐ์ด
- ๋ถ๋ชจ ์ปดํฌ๋ํธ์ ์์ ์ปดํฌ๋ํธ๊ฐ ์๋ค๊ณ ๊ฐ์ ํ๋ฉด,
- ์์ ์ปดํฌ๋ํธ์์์ [ ์ปดํฌ๋ํธ ๋ช : AppHeader ]
<button v-on:click="sendEvent">send</button>
/<template>
export default {
props: ['propsdata'],
method: {
sendEvent: function() {
this.$emit('renew')
}
}
}
๋ฒํผ์ ํด๋ฆญํ๋ฉด sendEvent๋ผ๋ ์ด๋ฆ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ๋ ๋ฆฌ๊ฒ๋๊ณ , ๊ทธ๊ฒ์ this.$emit ์ ํตํด renew ๋ผ๋ ๊ฐ์ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก ๋ณด๋ด๊ฒ ๋๋ค
- ๋ถ๋ชจ ์ปดํฌ๋ํธ์์๋ [ App.vue ]
...
<app-header
v-bind:propsdata="str"
v-on:renew="renewStr"></app-header>
<script>
export default {
data: function() {
return {
str: 'Header'
}
},
components: {
'app-header':AppHeader
},
methods: {
renewStr: function() {
this.str = 'hi'
}
}
}
- v-bind๋ [ … v-bind:ํ๋กญ์ค ์์ฑ ์ด๋ฆ=”์์ ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ ์ด๋ฆ” ] ์ด๋ฆ์ ํตํด์ ๋ถ๋ชจ ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ๋ฅผ ์์ ์ปดํฌ๋ํธ์ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ํตํด์ ๊ฐ์ ์ ๋ฌํ๋ฉฐ,
- ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ธ, App ์์๋ ์ด๊ธฐ str ๋ฐ์ดํฐ ๊ฐ์ Header ์ด๋ฉฐ,
- ์์ ์ปดํฌ๋ํธ์์๋, props ๋ฅผ ํตํด์ app-header ์ propsdata ๋ผ๋ ์์ฑ์ ๋ถ๋ชจ์ str ๋ฐ์ดํฐ ๊ฐ์ธ Header๊ฐ ๋ค์ด์๊ฒ ๋๋ฉฐ,
- send ๋ฒํผ์ด ์๋๋ฐ, ๋๋ฅด๊ฒ ๋๋ฉด, ์์ ์ปดํฌ๋ํธ์ ๋ฒํผ์ด ์๋๊ฑด๋ฐ, renew ๋ผ๋ ์ด๋ฆ์ผ๋ก ์ด๋ฒคํธ๊ฐ ์ฌ๋ผ์ค๊ฒ๋๊ณ ,
- App ์ปดํฌ๋ํธ์ app-header ์ v-on์ ํตํด์, renewStr ์ ํตํด์ ๋ถ๋ชจ์ปดํฌ๋ํธ์ str์ Header์์ hi ๋ก ๋ฐ๋๊ฒ ๋จ
๋ฐ์ํ
'๐๏ธ์ํํธ์จ์ด > ๐JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ajax] post, get ๋ฐฉ์ ์ด์ฉํ ์น์ฌ์ดํธ ๋ง๋ค๊ธฐ (0) | 2022.09.22 |
---|---|
[html + css + js] ๊ณต๊ณต๊ธฐ์จ API ํ์ฉ - ajax (0) | 2022.09.20 |
[Vue.js] ๋ฌธ๋ฒ ๊ธฐ์ด 1ํธ(props, v-bind, v-on, router, axios) (0) | 2022.09.18 |
์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด ๊ฐ๋ ์ด์ ๋ฆฌ (0) | 2022.08.11 |
์ค์ฒฉ for๋ฌธ ์ด์ฉํ์ฌ ํ ์ด๋ธ ๋ง๋ค๊ธฐ (0) | 2022.08.11 |