본문 바로가기

FrontEnd/java script

[java script] Vue.js 데이터 변화(computed, watch)를 이용한 마무리 예

728x90
반응형
◎ 이번에 배운 computed, watch를 이용한 예제

 

조건)

▷ 입력 금지 문자열을 ,(콤마) 기준으로 입력할 수 있다.
▷ 제한 시간을 넣고 시작 버튼을 누르면 텍스트를 넣을 수 있다.
▷ 제한 시간이 실시간으로 표시된다.
▷ 입력 중 금지 문자열이 나올 경우 경고를 띄우고 확인 버튼을 누르면 해당 문자열은 삭제되며 시간이
     +10초 추가된다.
▷ 제한 시간이 완료되면 텍스트 입력창은 비활성화되고 입력 창 아래 입력한 문자의 개수가 표시되며
     금지어를 사용한 횟수 * 12 한 벌점을 출력한다.
결과 화면)

 

 

 

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <link rel="stylesheet" href="style.css" >
  <script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>
</head>
<body>
  <h2>제한 시간내에 문자 입력하기</h2>
  <div id="app">
    <label>금지문자 (,로 나누어 복수입력가능) <input v-model="fbdText"></label><br><br>
    <label>제한시간을 입력하세요 (초) <input v-model="restTime">
      <button v-on:click="startFun">시작</button></label><br>
    <p>남은 시간 {{ restTime }}초</p>
    <textarea v-if="tf" v-model="inputText" :disabled="block"></textarea>
    <p>{{ inputText.length }} 개의 문자를 입력하였습니다.</p>
    <p>별점 : {{ star }} (금지문자 1개당 12점)</p>
  </div>

  <script>
    new Vue({
      el: '#app',
      data: {
        fbdText: [],
        inputText: '',
        fbdNum: 0,
        tf: false,
        restTime: 0,
        a:null,
        block: false,
      },
      methods:{
        startFun: function(){
          this.tf = true;
          this.a = setInterval(() => {this.restTime--}, 1000);
        }
      },
      watch:{
        inputText: function(){
          var newText = this.fbdText.split(',');

          for(var i=0; i<newText.length; i++){
            var a = this.inputText.indexOf(newText[i]);
            if(a >= 0){
              alert(newText[i] + '는 금지문자입니다.')
              this.inputText = this.inputText.substr(0, a);
              this.restTime += 10;
              this.fbdNum++;
            }
          }
        },
        restTime: function(){
          if(this.restTime <= 0){
            clearInterval(this.a);
            this.block = true;
          }
        }
      },
      computed:{
        star: function(){
          return this.fbdNum * 12;
        }
      }
    })
  </script>
</body>
</html>
위의 조건들을 모두 만족하는 결과를 도출했습니다.

변수를 총 7개 만들었고 버튼과 관련된 method 1개, watch를 이용해 화면의 변화를 감지하는 함수를 2개, 값을 계산한는 함수를 1개 만들어 결과화면을 나타낼 수 있었습니다.

여기서 사용한 것들은 앞의 computed, wathc를 활용한 예제의 코드들과 대부분 유사합니다.

 

처음 이 예시를 봤을 때는 막막했었지만 하나씩 결과들을 도출하다보니 혼자서 문제를 해결할 수 있었습니다.

 

이렇듯 계속해서 예제를 반복하면서 앞의 내용들을 복습해 가야겠어요!!!

 

많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

 

728x90
반응형