인라인 이벤트 핸들링
<html>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
<body>
<div class="container">
<h1>bootstrap test bootstrap test bootstrap test </h1>
<button class = "btn" v-on:click = "votes++">
upvote! {{votes}}
</button>
</div>
</body>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js" integrity="sha384-smHYKdLADwkXOn1EmN1qk/HfnUcbVRZyYmZ4qpPea6sjB/pTJ0euyQp0Mk8ck+5T" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script>
new Vue({
el: '.container' ,
data : { votes : 0 }
})
</script>
</html>
메서드 이벤트 처리
<html>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
<body>
<div class="container">
<h1>bootstrap test bootstrap test bootstrap test </h1>
<button class = "btn" v-on:click = "upvote">
upvote! {{votes}}
</button>
</div>
</body>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js" integrity="sha384-smHYKdLADwkXOn1EmN1qk/HfnUcbVRZyYmZ4qpPea6sjB/pTJ0euyQp0Mk8ck+5T" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script>
new Vue({
el: '.container' ,
data : { votes : 0 } ,
methods : {
upvote : function(){
this.votes++;
}
}
})
</script>
</html>
같은동작이지만
아래 Vew 객체에 mothods를 추가하고 그것을 참조하여 동작
축약형도 존재
<div class="container">
<h1>bootstrap test bootstrap test bootstrap test </h1>
<button class = "btn" v-on:click = "upvote">
upvote! {{votes}}
</button>
</div>
<div class="container">
<h1>bootstrap test bootstrap test bootstrap test </h1>
<button class = "btn" @click = "upvote">
upvote! {{votes}}
</button>
</div>
같은 의미
이벤트 한정자
<html>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
<body>
<div class = "container">
<form class = "form-inline" >
<input v-model.number = "a" class = "form-control">
<select v-model="operator" class = "form-control">
<option>+</option>
<option>-</option>
<option>*</option>
<option>/</option>
</select>
<input v-model.number = "b" class = "form-control">
<button type="submit" @click = "calculate" class ="btn"> 제출
</button>
</form>
<h2> result : {{a}} {{operator}} {{b}} = {{c}} </h2>
</div>
</body>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js" integrity="sha384-smHYKdLADwkXOn1EmN1qk/HfnUcbVRZyYmZ4qpPea6sjB/pTJ0euyQp0Mk8ck+5T" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
<script>
new Vue({
el: '.container' ,
data : {
a : 1 ,
b : 2 ,
c : null ,
operator : "+"
} ,
methods : {
calculate : function(){
switch (this.operator){
case "+" : this.c = this.a +this.b
break;
case "-" : this.c = this.a - this.b
break;
case "*" : this.c = this.a * this.b
break;
case "/" : this.c = this.a /this.b
break;
}
}
}
})
</script>
</html>
요런식으로 구성하니
From에 submit이 되면서 자동으로 페이지가 리플래쉬 된다.
Submit 버튼 눌렀을때 이벤트만 되어야한다
보통 폼 제출은 onsubmit 이고 event.preventDefault()를 호출한다고 한다.
calculate : function(){
event.preventDefault();
switch (this.operator){
case "+" : this.c = this.a +this.b
break;
case "-" : this.c = this.a - this.b
break;
case "*" : this.c = this.a * this.b
break;
case "/" : this.c = this.a /this.b
break;
}
이렇게 처리하면 어려우니 제공을 해준다.
.prevent
.stop
.self
이것을 버튼에 적용한다.
<button type="submit" @click.prevent= "calculate" class ="btn"> 제출