Vue.js_Instance
๐ Vue.js
๐ Vue.js Instance
Vue Instance
-
el
- Vue๊ฐ ์ ์ฉ๋ ์์ ์ง์
- CSS Selector or HTML Element
- ํ๊ทธ์ ์ง์ ํ ID, ํด๋์ค๋ช , ํ๊ทธ๋ช ์ผ๋ก ํด๋น ํ๊ทธ์ Vue Instance๋ฅผ ์ฐ๊ฒฐํ๋ ์ต์
-
data
- Vue์์ ์ฌ์ฉ๋๋ ์ ๋ณด ์ ์ฅ
- ๊ฐ์ฒด ๋๋ ํจ์์ ํํ
- key์ value๋ฅผ ์ง์ ํ๋ json ํ์
- ๋ฐ์ดํฐ ์ ๋ ฅ ์ต์
-
template
- ํ๋ฉด์ ํ์ํ HTML, CSS ๋ฑ์ ๋งํฌ์ ์์๋ฅผ ์ ์ํ๋ ์์ฑ
- ๋ทฐ์ ๋ฐ์ดํฐ ๋ฐ ๊ธฐํ ์์ฑ๋ค๋ ํจ๊ป ํ๋ฉด์ ๊ทธ๋ฆด ์ ์๋ค.
-
methods
- ํ๋ฉด ๋ก์ง ์ ์ด์ ๊ด๊ณ๋ method๋ฅผ ์ ์ํ๋ ์์ฑ
- ๋ง์ฐ์ค ํด๋ฆญ ์ด๋ฒคํธ ์ฒ๋ฆฌ์ ๊ฐ์ด ํ๋ฉด์ ์ ๋ฐ์ ์ธ ์ด๋ฒคํธ์ ํ๋ฉด ๋์๊ณผ ๊ด๋ จ๋ ๋ก์ง์ ์ถ๊ฐ
- created
Vue Instance ์ ํจ๋ฒ์
- Vue Instance๋ฅผ ์์ฑํ๋ฉด HTML์ ํน์ ๋ฒ์ ์์์๋ง ์ต์ ์์ฑ๋ค์ด ์ ์ฉ
- el ์์ฑ๊ณผ ๋ฐ์ ํ ๊ด๊ณ๊ฐ ์๋ค.
- ์ธ์คํด์ค๊ฐ ํ๋ฉด์ ์ ์ฉ๋๋ ๊ณผ์
- ๋ทฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ ๋ก๋ฉ
- ์ธ์คํด์ค ๊ฐ์ฒด ์์ฑ ( ์ต์ ์์ฑ ํฌํจ )
- ํน์ ํ๋ฉด ์์์ ์ธ์คํด์ค๋ฅผ ๋ถ์
- ์ธ์คํด์ค ๋ด์ฉ์ด ํ๋ฉด ์์๋ก ๋ณํ
- ๋ณํ๋ ํ๋ฉด ์์๋ฅผ ์ฌ์ฉ์๊ฐ ์ต์ข ํ์ธ
(View)
<div id="app">
<h2></h2>
</div>
<script>
(Model)
var model = {
message : " ๋ทฐ ์์ฑ "
}
(View Model)
new Vue({
el : '#app',
data : model
})
</script>
-> ์ถ๋ ฅ์ " ๋ทฐ ์์ฑ " ์ด ๋๋ค. - ์ ํจ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๊ฒฝ์ฐ
<div id="app"></div>
<h2></h2>
<script>
var model = {
message: " ๋ทฐ ์์ฑ ",
};
new Vue({
el: "#app",
data: model,
});
</script>
-> ์ถ๋ ฅ์ด ๋ก ๋๋ค.
- Vue()๋ก ์ธ์คํด์ค๊ฐ ์์ฑ ๋์๋ค. ( new Vue() )
- el ์์ฑ์ด ์ง์ ํ ํ๋ฉด ์์ ( DOM ) ( #app ) ์ ์ธ์คํด์ค๊ฐ ๋ถ์ฐฉ๋๋ค.
- el ์์ฑ์ ์ธ์คํด์ค๊ฐ ๋ถ์ฐฉ๋ ํ data ์์ฑ์ด el ์์ฑ์ ์ง์ ํ ํ๋ฉด ์์์ ๊ทธ ์ดํ ๋ ๋ฒจ์ ํ๋ฉด ์์์ ์ ์ฉ๋์ด ๊ฐ์ด ์นํ๋๋ค.
Vue Instance Life Cycle
Vue Instance Life Style์ ํฌ๊ฒ ๋๋๋ฉด
- Instance์ ์์ฑ
- Instance๋ฅผ ํ๋ฉด์ ๋ถ์ฐฉ
- Instance ๋ด์ฉ์ ๊ฐฑ์
- Instance ์ ๊ฑฐ
LifeCycle ์์ฑ | ์ค๋ช |
beforeCreate | Vue Instance๊ฐ ์์ฑ๋๊ณ ๊ฐ ๋ฐ์ดํฐ๋ค์ ์ค์ ์ ์ ํธ์ถ |
created | Vue Instance๊ฐ ์์ฑ๋ ํ ๋ฐ์ดํฐ๋ค์ ์ค์ ์ด ์๋ฃ๋ ํ ํธ์ถ Instance๊ฐ ํ๋ฉด์ ๋ถ์ฐฉํ๊ธฐ ์ ์ด๊ธฐ ๋๋ฌธ์ template ์์ฑ์ ์ ์๋ DOM ์์๋ ์ ๊ทผ ๋ถ๊ฐ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญ ( http ํต์ ) ํ์ฌ ๋ฐ์์ค๋ ๋ก์ง์ ์ํํ๊ธฐ ์ข๋ค |
beforeMount | ๋ง์ดํธ๊ฐ ์์๋๊ธฐ ์ ์ ํธ์ถ |
mounted | ์ง์ ๋ element์ Vue Instance ๋ฐ์ดํฐ๊ฐ ๋ง์ดํธ ๋ ํ์ ํธ์ถ template ์์ฑ์ ์ ์ํ ํ๋ฉด ์์์ ์ ๊ทผํ ์ ์์ด ํ๋ฉด ์์๋ฅผ ์ ์ดํ๋ ๋ก์ง ์ํ |
beforeUpdate | ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋ virtual DOM์ด ๋๋๋ง, ํจ์น๋๊ธฐ ์ ์ ํธ์ถ |
updated | Vue์์ ๊ด๋ฆฌ๋๋ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ด DOM์ด ์
๋ฐ์ดํธ ๋ ์ํ ๋ฐ์ดํฐ ๋ณ๊ฒฝ ํ ํ๋ฉด ์์ ์ ์ด์ ๊ด๋ จ๋ ๋ก์ง์ ์ถ๊ฐ |
beforeDestroy | Vue Instance๊ฐ ์ ๊ฑฐ๋๊ธฐ ์ ์ ํธ์ถ |
destroyed | Vue Instance๊ฐ ์ ๊ฑฐ๋ ํ ํธ์ถ |
Vue Instance ์์ฑ
Vue Method
- Vue Instance๋ ์์ฑ๊ณผ ๊ด๋ จ๋ data ๋ฐ method์ ์ ์ ๊ฐ๋ฅ
-
method์์์ data๋ฅผ
this.๋ฐ์ดํฐ์ด๋ฆ
์ผ๋ก ์ ๊ทผ ๊ฐ๋ฅ - ์ค์ต
<body>
<div id="app">
<div>data : </div>
<div>method kor : </div>
<div>method eng : </div>
</div>
</body>
<script>
new Vue({
el: "#app",
data: {
name: 'JS',
msg: 'Data์
๋๋ค.',
},
methods: {
helloKor(){
return "์๋
" + this.name;
},
helloEng(){
return "Hello " + this.name;
}
}
})
</script>
- ์คํ ๊ฒฐ๊ณผ
Vue filter
- ๋ทฐ์ ํํฐ๋ ํ๋ฉด์ ํ์๋๋ ํ ์คํธ์ ํ์์ ์ฝ๊ฒ ๋ณํํด์ฃผ๋ ๊ธฐ๋ฅ
- filter๋ฅผ ์ด์ฉํ์ฌ ํํ์์ ์๋ก์ด ๊ฒฐ๊ณผ ํ์์ ์ ์ฉ
- ์ค๊ดํธ ๋ณด๊ฐ๋ฒ [] ๋๋ v-bind ์์ฑ์์ ์ฌ์ฉ์ด ๊ฐ๋ฅ
<!-- ์ค๊ดํธ ๋ณด๊ฐ๋ฒ -->
<!-- v-bind -->
<div v-bind:id="rawId | formatId"></div>
- ์ ์ญ ํํฐ
Vue.filter(
'count1', (val) => {
if(val.length == 0){
return;
}
return `${val} : ${val.length}์`;
}
)
- ์ง์ญ ํํฐ
new Vue({
el: "#app",
filters: {
count1(val, alternative){
if(val.length == 0){
return alternative;
}
return `${val} : ${val.length}์`;
}
}
})
-
์ค์ต
๊ธ์ก์ ์ฒ ๋จ์๋ง๋ค โ,โ ์ฐ๊ธฐ
๋ฒํธ๋ ์ฌ์ด์ โ-โ ๋ฃ๊ธฐ
<body>
<div id="app">
<div>
๊ธ์ก : <input type="text" v-model="msg1"><br>
์ ํ๋ฒํธ : <input type="text" v-model="msg2">
</div>
<div>
<h3></h3>
<h3></h3>
</div>
</div>
</body>
<script>
Vue.filter('price', (value) => {
if(!value) return value;
return value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',');
});
Vue.filter('mobile', (value) => {
if(!value || !(value.length === 10 || value.length === 11)) return value;
return value.replace(/^(\d{3})(\d{3,4})(\d{4})/g, '$1-$2-$3');
});
new Vue({
el: "#app",
data: {
msg1: '', msg2: '',
},
});
</script>
- ์คํ ๊ฒฐ๊ณผ
Vue computed
- ํน์ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ฌํญ์ ์ค์๊ฐ์ผ๋ก ์ฒ๋ฆฌ
- ์บ์ฑ์ ์ด์ฉํ์ฌ ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ด ์์ ๊ฒฝ์ฐ ์บ์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐํย ยป ๊ฐ
- Setter์ Getter๋ฅผ ์ง์ ์ง์ ํ ์ ์์
- ์์ฑ์ method ํํ๋ก ์์ฑํ์ง๋ง Vue์์ proxy ์ฒ๋ฆฌํ์ฌ property ์ฒ๋ผ ์ฌ์ฉ
- ์ข ์ ๋์์ ๋ฐ๋ผ ์ ์ฅ(์บ์ฑ) ๋๋ค๋ ๊ฒ์ด๋ค.
-
watch ๋ณด๋ค๋ computed๋ฅผ ๊ถ์ฅํ๋ค
- ์ค์ต
<body>
<div id="app">
<p>์๋ณธ ๋ฉ์ธ์ง : ""</p>
<p>์ญ์์ผ๋ก ํ์ํ ๋ฉ์ธ์ง : ""</p>
<input type="text" v-model="msg">
</div>
</body>
<script>
new Vue({
el: "#app",
data: {
msg: '',
},
computed: {
reverseMsg: function(){
return this.msg.split('').reverse('').join('');
},
},
});
</script>
- ์คํ ๊ฒฐ๊ณผ
Vue computed VS Vue method
computed ์์ฑ์ Vue ์ธ์คํด์ค๊ฐ ์์ฑ๋ ๋, ๊ฐ์ ๋ฐ์ ๊ณ์ฐํ์ฌ ์ ์ฅํด ๋๋๋ค. ( ์บ์ฑ )
๊ฒฐ๊ณผ์ ์ผ๋ก 3๋ฒ ์ถ๋ ฅ๋๋ ๊ฒฝ์ฐ ํ ๋ฒ ์คํํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
method ๋ ์ถ๋ ฅ๋ ๋ ๋ง๋ค ๊ณ์ฐํ๋ค.
๊ฒท๊ณผ์ ์ผ๋ก 3๋ฒ ์ถ๋ ฅ๋๋ ๊ฒฝ์ฐ ์ธ ๋ฒ ์คํํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
Vue watch
- Vue Instance์ ํน์ property ๊ฐ ๋ณ๊ฒฝ๋ ๋ ์คํํ ์ฝ๋ฐฑ ํจ์ ์ค์
- Computed๋ ์ข ์๋ data๊ฐ ๋ณ๊ฒฝ๋์์ ๊ฒฝ์ฐ ๊ทธ data๋ฅผ ๋ค์ ๊ณ์ฐํ์ฌ ์บ์ฑํ๋ค.
-
Watch์ ๊ฒฝ์ฐ๋ data๊ฐ ๋ณ๊ฒฝ๋์์ ๊ฒฝ์ฐ ๋ค๋ฅธ data๋ฅผ ( ๋ณ๊ฒฝํ๋ ) ์์ ์ ํ๋ค.
- ์ค์ต
<body>
<div id="app">
<p>์๋ณธ ๋ฉ์ธ์ง : ""</p>
<p>์ญ์์ผ๋ก ํ์ํ ๋ฉ์ธ์ง : ""</p>
<input type="text" v-model="msg">
</div>
</body>
<script>
new Vue({
el: "#app",
data: {
msg: '',
reverseMsg: '',
},
watch: {
msg: function(newVal, oldVal){
this.reverseMsg = newVal.split('').reverse('').join('');
},
},
});
</script>
- ์คํ ๊ฒฐ๊ณผ