ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Vue / 7강, 8강 / Component의 기본, Data Binding
    DEV/Vue 2022. 7. 15. 00:25
    728x90
    반응형

    https://ccamanglab.tistory.com/25

     

    Vue / 1~6강 / 프론트엔드 프레임워크와 ES6

    프론트엔드 개발자를 위한 Vue.js 시작하기 강의를 들으며 정리한 내용 1강 프론트엔드 웹 어플리케이션 서버 사이드 도움 받지 않고도 서비스를 제공 서버사이드와 적절히 연동하면서 구현 클라

    ccamanglab.tistory.com

    지난 글에 이어서 쓰는 글

    오늘부터 본격적인 Vue에 대해 공부한다.

     

     

    7. Component기본

     

    [Component의 특징]

    Vue의 핵심 구성 요소

    UI를 위한 화면(DOM)과 로직(Javascript)의 결합

     

    컴포넌트가 기술요소의 메인요소임

    한마디로 정의하면 재사용 가능한 동적 UI 구성을 목적으로 함

     

    Component Tree 구조

    의미 단위로 Component를 구성하고, 구성된 Component를 조합해서 화면을 구성함

     

    Objcet Literal로 Component 선언

    템플릿, 매소드, 데이터등 다양한 option을 가지는 오브젝트 리터럴로 선언

    컴포넌트의 데이터는 data(){} 스타일의 함수로 선언

    Component의 화면은 template 속성으로 정의

    {{}}표현식을 이용함

     

    Application Instance를 이요해 component출력

    createApp() 함수로 Application Instance 생성

    매개 변수에 Root Component 등록

     

    Vue 파일로 Component 선언

    확장자가 Vue인 파일

    <template>,<Script>,<style> 태그로 컴포넌트 구성

     

    [Component의 이용]

    글로벌 등록 사용

    Application Instance에 Component등록

    Application 전역에서 Component 이용

    Application Instance의 component()함수로 등록

     

    첫번째 매개변수가 Component 태그명임

    var app = createApp(Super)

    app.component('Sub',Sub)

     

    로컬로 등록 사용

    Component가 필요한 곳에서 등록해서 사용

    Components 속성을 이용해 등록

     

    8. Component 옵션과 바인딩

     

    [components]

    Child Component를 등록하기 위한 옵션

    components : {
    MySub
    }

     

    [template]

    Component의 UI Template

    데이터가 바인딩 되어야 하는 부분을 {{}}으로 표현

    Component의 데이터가 변경되면 템플릿에 의해 출력되는 부분도 변경

    template : `
    <div>
    	<div>message : {{msg}} </div>
    </div>
    `

     

    [data]

    Component를 위한 data 설정

    data에 설정된 값을 template, method 등에서 이용

    data(){
    	return {    
        msg : 'hello',
        arrayData:[
    	    {message : 'hello'},
      		{message : 'world'}
        ]
        }
    }

     

    [methods]

    컴포넌트에 메서드를 등록하기 위한 옵션

    컴포넌트를 위한 비즈니스 업무 로직의 함수들이 등록되는 부분

    캐싱 기능 없음

    <p>Computed reversed message : "{{ reversedMessage() }}"</p>
    ....
    methods {
    	reversedMessage : function () {
    		return this.msg.split('').reverse().join('')
    	}
    }

     

    [computed]

    템플릿 표현식의 복잡함을 줄이기 위해서 제공

    표현식을 함수로 정의한 후 computed 속성에 등록하면,

    템플릿에서 Getter Property로 이용

    캐싱 기능 제공

    <p>Computed reversed message : "{{ reversedMessage }}"</p>
    ....
    computed {
    	reversedMessage : function () {
    		return this.msg.split('').reverse().join('')
    	}
    }

    ()들어가지 않고 그냥 변수 데이터 처럼 사용한다.

     

    기본으로는 Getter함수만 제공 되지만, 원한다면 Setter 함수 추가 가능

    Setter 함수도 Property로 이용함 fullName = 'Lee'

    FullName:{
    get: function(){},
    set: function(val){},
    }

     

    [watch]

    Data변경을 감지 하는 것

     

    Watch:{
    
    fisrtName : fuinction (val) {
    this.fullName = val + ''+this.lastName}
    
    lastName : function (val) {
    this.fullName = this.firstName + '' +val
    
    }

     

    [Component Data Biniding]

    Component Data를 화면에 출력함

    Data는 data(){}에 명시

    Template에서 Data Binding은 {{}}표현식 이용

     

    <template>
      <div>
        Hello, {{name}}
      </div>
    </template>
    <script>
    export default {
      data(){
        name : 'vue...'
      }
    }
    </script>

     

    [Tag Attribute 값에 Data Binding]

    HTML 속성 값에 데이터 바인딩 {{}}을 사용할 수 없음

    v-bind를 이용해 속성 값을 지정함

    <div v-bind:id="dynamicId"></div>
    ...
    data(){
    	return {
    		dynamicId : 'a1'
    	}
    }

     

    값이 Boolean이 대입되는 속성 경우, 데이터값이 false,undefined,null 이면 속성이 추가되지 않음

    <button v-bind:disabled="isButtonDisabled">Button</button>
    ...
    data(){
    	return {
        	isButtonDisabled:true
            }
    }

     

    [Data Binding관련 Directive]

    v-once => 초기 데이터 출력 후 데이터를 변경해도 업데이트 되지 않는 Template

    <span v-once>This will never change : {{msg}}</span>

    v-html => rawHtml로 출력

    <p>Using mustaches : {{ rawHtml}} </p>
    <p>Using v-html directive : <span v-html="rawHtml"></span></p>

     

    [표현식 출력]

    템플릿의 {{ }} 혹은 v-bind 안에 자바스크립트 표현식이 가능

    단일 표현식만 가능

    {{number + 1}}
    {{ok ? 'YES' : 'NO'}}
    {{msg.split('').reverse().join('')}}
    
    <div v-bind:id="'list-'+ number"></div>
    ...
    data(){
    	return {
    		number : 10,
    		ok:'YES'
    	}
    }
    반응형

    'DEV > Vue' 카테고리의 다른 글

    Vue / 13강, 14강 / Vuex  (0) 2022.07.17
    Vue / 12강 / Router, SPA  (0) 2022.07.16
    Vue / 9강 ~ 11강 / Component Life Cycle, Directive  (0) 2022.07.15
    Vue / 1~6강 / 프론트엔드 프레임워크와 ES6  (0) 2022.07.14

    댓글

Designed by Tistory.