• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Vue 게시판 watcher 수업을 듣고 숙제를 하다가 궁금한 점이 있습니다.

watcher 수업을 듣고 숙제를 하다가 궁금한 점이 있습니다.

10 글 보임 - 1 에서 10 까지 (총 10 중에서)
  • 글쓴이
  • #50136

    오보배
    참가자
    안녕하세요 선생님! 항상 강의 잘 보고 있습니다.
    watcher 강의를 듣고 나서 평소처럼 숙제를 하고 있었는데 궁금한 점이 생겨서 글을 작성하게 되었습니다.
    
    제가 작성한 코드는 아래와 같습니다.
    
    <template>
    <input type="text" v-model.number="month">
    <p> {{month}}개월 선택함 : {{ 원룸들[누른거].price * month}}</p>
    </template>
    
    <script>
    <span style="color: #ff6600;"><span style="color: #800080;">export defaul<span style="color: #800080;">t</span></span></span> {
      name: 'ModalItem',
      props: {
       원룸들: Array,
       누른거: Number,
       모달창열렸니: Boolean, 
      },
      data () {
       return {
        month: 1,
       }
     },
      methods: {
       closeModal(){
        this.$emit('모달창닫기')
        }
     },
      watch: {
       month(a){
        // 사용자가 month를 글자로 입력하면 경고문 띄어주고 month의 초기값을 1로 바꿔주세요
        const str = /\s/g;
        if(isNaN(a) == true) {
        alert('숫자만 입력해주세요.')
        this.month = 1
       } else if (a.match(str)) {
        alert('숫자만 입력해주세요.')
        this.month = 1
     }
     }
     }
    }
    </script>
    
    
    1. 선생님께서 watch에 inNaN을 넣으셨지만 저는 처음에 typeof(a) == 'string' 을 넣었는데 이게 처음 초기값인 1을 지우기만 해도
    alert창이 뜨던데 그 이유가 궁금합니다.
     이미 v-model에 number만 들어간다고 명시를 해놓았는데 공백도 문자열로 잡혀서 그런걸까요?
    그리고 무엇보다 typeof을 썼을 때, alert창은 뜨는데 month의 초기값이 1로 설정이 안되더라구요.. 
    숫자만 넣었을 때에도 계산이 안됩니다ㅜㅜ
    typeof을 처음부터하면 안되는거였을까요..?
    
    2. 숙제내주신 부분을 활용해서 스페이스를 입력할 시에 alert가 뜨고 초기값을 1로 설정하도록 코드를 작성해보았는데 
    위처럼 코드를 작성할 시에 두 케이스 다 alert창은 표시가 되는데 month값이 초기화가 안됩니다ㅜㅜ
    그리고 숫자만 입력했음에도 월세 계산이 되지 않습니당... 무슨 문제가 있는 걸까요?? 답변 주시면 감사하겠습니다!!
    #50172

    codingapple
    키 마스터
    <input> 에넣은 값은 항상 문자입니다
    공백을 넣으면 이렇게 해달라고 if문같은거 추가해봅시다
    #50216

    오보배
    참가자
    const str = /\s/g;
    else if (a.match(str)) {
    alert('숫자만 입력해주세요.')
    this.month = 1
    } 추가한게 이건데 이게 되지 않아서요,,,
    alert은 뜨는데 초기화가 1로 되지 않습니다.
    
    else if를 if로 바꿔도 동일합니다.
    #50223

    codingapple
    키 마스터
    a가 문자일 때만 a.match 하라고 조건을 추가합시다
    #50224

    오보배
    참가자
    앗 선생님 해결됐습니다!! 저는 공백이 '/\s/g' 이걸 뜻하는 줄 알았는데
    그냥 '  '였네요...ㅠㅠㅠ 혼자 북치고 장구쳐서 죄송합니다...! 감사합니다!
    #51298

    hyeon
    참가자
    .
    #51299

    hyeon
    참가자
    watch: {
      month(after) {
        if (after > 12) {
          alert("12이상 입력하지 마셈");
            this.month = 1;
        }
        const str = /\s/g;
          if (isNaN(after) === true) {
            alert("숫자만 입력하셈");
            this.month = 1;
          } else if (typeof after === "string" && after.match(str)) {
            alert("숫자만 입력하셈");
            this.month = 1;
          }
        },
      },
    올리신 거 참고해서 코드 작성했는데 초기값 1을 지우고 영어를 작성하면 한 개 작성하자마자 alert가 뜨는데 
    한글은 두 개를 작성해야 alert가 뜨고 또 2번 반복되서 뜨더라구요 혹시 해결하셨나요?
    #51345

    codingapple
    키 마스터
    원래 한글은 자음모음 합쳐서 한 글자가 완성된 후에 입력됩니다
    #51574

    hyeon
    참가자
    그럼 위에처럼 코드를 짰으면 기존에 있던 1을 지우거나 안지우고 바로 자음 모음 합친 한 글자만 썼을 때 alert가 안뜨고 한 글자 작성후 자음이나 모음 작성했을 때 alert가 두 번 뜨는게 정상적인건가요?
     
    #51611

    codingapple
    키 마스터
    넴 2번뜨는건 alert 코드 위치를 바꾸거나 해봅시다
10 글 보임 - 1 에서 10 까지 (총 10 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠