Copy <! 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 Directive Example</ title >
< style >
* {
box-sizing : border-box ;
}
#app {
position : fixed ;
left : 50 % ;
transform : translate (-50 % , 0 % ) ;
margin-top : 30 px ;
width : 300 px ;
}
#app input ,
#app button {
width : 100 % ;
padding : 10 px ;
margin : 10 px 0 px ;
}
</ style >
</ head >
< body >
< div id = "app" >
< h2 >VueJS v-if example</ h2 >
< div >
< h3 >회원 가입 1단계 : 아이디 입력</ h3 >
< input type = "text" v-model = "member.id" >
</ div >
< div v-if = "level1" >
< h3 >회원 가입 2단계 : 닉네임 입력</ h3 >
< input type = "text" v-model = "member.nickname" >
</ div >
< div v-if = "level2" >
< h3 >회원 가입 3단계 : 이메일 입력</ h3 >
< input type = "text" v-model = "member.email" >
</ div >
< button v-if = "level3" >
제출하기
</ button >
</ div >
< script src = "https://unpkg.com/vue@next" ></ script >
< script >
const app = Vue .createApp ({
data (){
return {
member : {
id : "" ,
nickname : "" ,
email : "" ,
} ,
};
} ,
computed : {
level1 (){ //아이디만 입력된 상태
return this . member . id . length > 0 ;
} ,
level2 (){ //아이디+닉네임이 입력된 상태
return this .level1 && this . member . nickname . length > 0 ;
} ,
level3 (){ //아이디+닉네임+이메일이 모두 입력된 상태
return this .level2 && this . member . email . length > 0 ;
} ,
} ,
});
app .mount ( "#app" );
</ script >
</ body >
</ html >
위의 예제를 실행하면 각각의 단계가 충족될 경우만 다음 단계의 내용이 생성되는 것을 확인할 수 있다. 개발자 도구를 열어보면 태그 자체가 생성되는 것을 확인할 수 있는데, 이는 강제 조작을 통한 폼 데이터의 전송을 방지할 수 있다.