computed
computed 계산 속성
사용법
데모 - 아이디 형식 검사
데모 - 이메일 작성
주의사항
Last updated
Last updated
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue computed 속성의 필요성</title>
</head>
<body>
<div id="app">
<div>
<label>
Nickname
<input type="text" v-model="nickname" v-on:input="nickname = $event.target.value">
</label>
</div>
<h5>닉네임 글자 수 : {{nickname.length}}</h5>
<h5>사용 가능 여부 : {{nickname.length >= 2 && nickname.length <= 6}}</h5>
</div>
<script src="https://unpkg.com/vue@next"></script>
<script>
const app = Vue.createApp({
data(){
return {
nickname:""
};
}
});
app.mount("#app");
</script>
</body>
</html><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue computed 속성의 필요성</title>
</head>
<body>
<div id="app">
<div>
<label>
Nickname
<input type="text" v-model="nickname" v-on:input="nickname = $event.target.value">
</label>
</div>
<h5>닉네임 글자 수 : {{nicknameLength}}</h5>
<h5>사용 가능 여부 : {{nicknameAvailable}}</h5>
</div>
<script src="https://unpkg.com/vue@next"></script>
<script>
const app = Vue.createApp({
data(){
return {
nickname:""
};
},
computed:{
nicknameLength(){
return this.nickname.length;
},
nicknameAvailable(){
return this.nickname.length >= 2 && this.nickname.length <= 6;
}
}
});
app.mount("#app");
</script>
</body>
</html>const app = Vue.createApp({
//data(){ return {}; },
computed:{
이름(){
return 값;
},
}
});<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue computed demo</title>
</head>
<body>
<div id="app">
<div>
<label>
ID
<input type="text" v-model="id">
</label>
</div>
<h6 v-text="result"></h6>
</div>
<script src="https://unpkg.com/vue@next"></script>
<script>
const app = Vue.createApp({
data(){
return {
id:""
};
},
computed:{
result(){
const regex = /^[a-z][a-z0-9_]{7,19}$/;
if(regex.test(this.id)){
return "사용 가능한 아이디 형식입니다";
}
else {
return "아이디는 영문 소문자로 시작하는 8~20자 이내의 영문 소문자, 숫자, _로 작성해주세요";
}
},
}
});
app.mount("#app");
</script>
</body>
</html><!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue computed getter/setter</title>
</head>
<body>
<div id="app">
<div>
Email :
<input type="text" v-model="email">
</div>
<h5>설정된 이메일 : {{email}}</h5>
</div>
<script src="https://unpkg.com/vue@next"></script>
<script>
const app = Vue.createApp({
data(){
return {
emailPrefix:"",
emailSuffix:""
};
},
computed:{
email:{
get(){
if(this.emailPrefix && this.emailSuffix){
return this.emailPrefix + "@" + this.emailSuffix;
}
else{
return "";
}
},
set(email){
const idx = email.indexOf("@");
if(idx < 0) {
return;
}
this.emailPrefix = email.substring(0, idx);
this.emailSuffix = email.substring(idx + 1);
}
},
}
});
app.mount("#app");
</script>
</body>
</html>