Vue 컴포넌트

복잡한 화면을 조합하여 구성하도록 재사용 가능한 Vue인스턴스이다

지역/ 전역으로 구분된다

컴포넌트를 등록하면 동시에 상위 컴포넌트가 된다

1. 전역 컴포넌트

Vue.component(' 이름 ' , {

});

 

2. 지역 컴포넌트 

new Vue({
	components: {
    	' 이름 ' : 내용 
    }
})

컴포넌트 명명 규칙 : 

1) 케밥케이스 : 소문자 + -

HTML 템플릿에서 그대로 이름을 사용한다

2) 파스칼케이스: 맨앞단어 대문자

HTML 템플릿에서 1) 2) 두가지 모두 사용가능하다

 

컴포넌트 통신:

Vue 컴포넌트는 기본적으로 데이터 주고받기 불가능 -> props를 이용하여 가능하다

props는 상위 컴포넌트에서 하위 컴포넌트로 데이터를 전달할 때 사용하는 속성이다

v-bind를 통해 넘겨준다

 

 

학원 수업도 끝났고 남는 시간에 한 번 만들어봐야겠다 생각만 하던 조합으로

프로젝트를 만들어 봐야겠다

[실전 SPA 개발 Vue.js with 타입스크립트 + 스프링 부트]

--전자책이라 엄청 신경써서 만드신건지 페이지분량이 어마무시하다..

+ 인프런 김영한 강사님의 스프링 / JPA강의를 참고하며 진행한다. 

 

1. Vue 생성

Vue() 생성자를 사용해 생성된 객체를 Vue 인스턴스라고 한다. DOM 요소에 마운트 해 Vue 기능을 사용한다

<div id="app">
	{{message}}
</div>


new Vue({
	el : '#app',   //요소
    
    data: {
    	message: 'Hello Vue!'
    }, //데이터
    
    computed: {
    	//computed 는 data 속성의 데이터에서 파생된 값을 공개하여 data 속성과 마찬가지로
        //템플릿에서 사용할 수 있게 한다. 함수형태지만 ()를 붙히지 않고 data값처럼 사용한다
    },
    methods : {
    	//methods 는 이벤트 처리 콜백함수 정의나 데이터 가공 함수 정의로 사용한다
        //computed는 캐시기능을 지원하고 methods는 매번 호출시 새로 실행을 보장한다
    },
    watch :{
		//watch는 데이터 변화를 감지하여 자동으로 특정 로직을 수행한다.
        //비동기 처리에 적합하다
    },
    filters: {
    	//필터는  | 왼쪽 하나의 인자를 받아 함수 형태로 정의한다
        //ex totalprice | numberFormat 으로 totalprice를 받아 화폐단위로 변환 등
    }
)}

//el없이
new Vue({
    data: {
    	message: 'Hello Vue!'
    }
)}.$mount('#app');

 

2. Vue의 인스턴스 라이프 사이클(생성부터 소멸까지)

beforeCreate -> data 속성과 methods 속성이 아직 인스턴스에 정의되어 있지 않다

created -> data와 methods 접근 가능

beforeMount -> el 속성에 지전항 화면 요소에 인스턴스 부착 전 호출 단계

mounted -> 인스턴스 부착 후 호출 단계

beforeUpdate -> 관찰하고 있는 데이터가 변경되면 가상 DOM으로 화면을 다시 그리기 전에 호출되는 단계

updated -> 데이터가 변경되고 나서 가상 DOM으로 다시 화면을 그리고나면 실행되는 단계

beforeDestroy -> 인스턴스 접근은 가능하므로 삭제하기 좋은 단계

destroyed -> 모든 속성 제거 후 인스턴스 파괴

 

3. Vue 템플릿 문법

템플릿은 Vue 인스턴스의 데이터와 뷰의 관계를 선언적으로 정의하는 역할

템플릿 문법으로 Mustache ( {{ }} ) / v-bind ( : ) 존재

 

4. 디렉티브 = Vue.js의 독자 정의 속성

v-if 지정한 뷰 데이터 값의 참 거짓 여부에 따라 HTML을 표시한다
v-for 뷰 데이터 개수만큼 HTML 반복 출력
v-show 데이터 진위 여부에 따라 display:none으로 만든다
v-bind HTML 태그의 기본 속성과 뷰 데이터 속성을 연결한다
v-on 화면 요소의 이벤트를 감지하여 처리할 때 사용한다
v-model 폼에 입력한 값을 뷰 인스턴스의 데이터와 즉시 동시화한다
(input, select , textaea 에 사용)
<tr>
	<td>비밀번호</td>
    <td><input type="password" v-bind:value="userPw"/></td>
</tr>
<tr>
	<td>소개</td>
    <td><textarea rows="5" v-bind:value="introduction"></textarea></td>
</tr>
<tr>
	<td>개발자여부</td>
    <td><span v-if="developer">개발자</span></td>
    <td><span v-else>개발자아님</span></td>
</tr>
<tr>
	<td>외국인여부</td>
    <td><span v-show="foreigner==='yes'">외국인</span></td>
</tr>
<tr>
	<td>사용자아이디</td>
    <td>
    	<input type="text" v-on:input="userId=$event.target.value" v-bind:value="userId">
    	//+ ex) v-on:change="~"
    </td>
</tr>
new Vue({
	el : "#app",
    
    data : {
		userId: "alex",
        userPw: "1234",
        introduction: "hello",
        developer : false,
        foreigner : "no",
        hobbyList : ["Sports" , "Music" , "Movie"],
        gender:"male",
        nationality : "01"
    },
    computed : {
    	getNationality: function(){
        	if(this.nationality ==="01"){
            	return "Korea";
            }else if(this.nationality ==="02"){
            	return "Germany";
            }else{
            	return "None";
            }
        }
    },
    methods :{
    	//데이터 값 
        onSubmit(){
        	const{ .....변수명} = this
        }
    }
})

 

 CLI =>커맨드 창에서 명령어로 특정 동작을 수행할 수 있도록 해주는 도구

전역설치하면 vue 명령어를 어디에서나 사용할 수 있다

 

cmd에서 npm install @vue/cli -global

 

설치 후 vue 명령어로 확인

 

확인 후 새로 생성한 폴더에 cd 후 vue create [프로젝트명] 

 

선택창에서 Manially select features 선택하면 vuex, vue-router 등을 선택적으로 설치할 수 있다

 

선택적으로 select 한다 ( 타입스크립트, 뷰엑스 라우터 린터)

 

y n 선택한다

 

설치 완료

 

npm run serve로 작동가능

 

--프로젝트 파일 생성 시 예시  --

타임리프 + vue 형태 사용

/* vue-property-decorator 는
vuejs 에서 typescript로 개발할 때,
클래스 컴포넌트 스타일로 개발하기 쉽게 도와주는 데코레이터 들 */
import{Component, Vue} from 'vue-property-decorator';

/* @Component 는 정의한 클래스를
Vue 가 인식할 수 있는 형태로 변환하는 것을 의미한다. */
@Component
export default class 클래스명extends Vue{

}

+ Recent posts