-
Vue.js 사용하기 -6( 화면 구성하기-axios & alert )JavaScript/Vue.js 2019. 2. 22. 11:47반응형
Axios !!
보통 웹페이지를 개발하는 사람들은 ajax 통신을 많이 사용한다. 다른곳에서 데이터를 가져와야하는 통신이 필요할때는 옛날부터 ajax 가 기본이였다.
Jquery 를 사용할떈 Jquery 를 이용하여 간편하게 ajax 통신을 사용했다. 하지만 일단 vue.js 를 사용하면서 jquery 를 사용할수 있음에도 불구하고 안사용하기로 마음 먹었기 때문에 뭔가 대체할만한것을 찾기 시작했고 아주 빠르게 Axios 란 놈을 찾을수 있었다.
일단 axios 를 사용하기위에선 npm 플러그인 설치가 필요하다. 간단하다
npm install --save axios
바로 설치가 가능하고 사용해주면 된다. 사용하는 vue 영역에서는 꼭 import 를 해놓고 사용한다.
import axios from "axios"
사용전에 주의할점이 하나 있다. 웹개발하면서 항상 걸림돌이 되는것중 하나인 호환성인다.
아래 버전들만 지원이 가능하다 정말 하위 호환이 필요하다면 그냥 jquery 를 넣어서 무겁더라도 사용 하거나 jquery lite 가 있다고 알고있으니 그걸 사용해도 된다.
그외에 다른 별다른 이슈사항이 없다면 그대로 사용해도 된다.
사용법은 아주아주 단순하고 간단 명료하다. post 통신을 위해서는 .post 를 선언해주고 get 방식을 이용하기 위해선 .get 을 선언해주면 된다.
axios 통신시 일단 통신에 필요한 데이터 세팅이 필요하다. 아래 캡쳐화면을 참고하면되는데 데이터는 선언된 괄호안에 아래와같이 키-값 구조로 넣으면 되고 javascript 에서 지원하는 모든 구조형식으로 전달이 가능하다.
응답처리는 더 쉽다. .then 으로 연결해준다음 response(변수) 로 받아주면 바로 사용이 가능하다. 보통 axios 는 응답을 받을 경우 response 안에 data 형식으로 받아 주기 때문에 response에서 값을 꺼내준다음 처리할 필요가 있다.
통신시 에러가 생길경우는 .catch 를 붙여주면 된다. 이경우는 function 으로 error 를 명시 해줘야 정상 동작한다. axios 사용시 특이한점은 json 형태의 값을 주고 받을시에 숫자형은 자동을 소수점을 붙이는 경우가 발생한다. 왜 그렇게 해놓은지 모르겠지만 소수점을 사용해야만 할때는 유용 하였다. 하지만 api 에서 받을때 멋모르고 숫자형태를 단순 String으로 변환 하려고 할때 int 가 아니다 보니 에러가 발생 했고, 반대로 화면으로 보냈을때 내가 의도하지 않은 숫자 포맷이 생겨서 그부분이 좀 불편했다. 그래서 임시 방편으로 데이터를 전달할때는(JS 내에서) 변수+"", 응답받을때는 응답주는곳에서 숫자를 문자로 변경해서 보내는 작업을 추가해주었다. 그래도 일단 axios 를 쓸거 같다. 확인해본바로는 현재 까지 github 내에서 vue 와 관련된 프로젝트중에 가장 좋은 평가를 받고 있으며 실제로 사용이 쉽다는게 좋다.
axios.post(this.mainUrl+"/test/getUser", {
id: this.id,
name: this.name
}).then((response) => {
var data = response.data;
this.body_data = data.detail;
this.game_paginationData.total = data.cnt;
if (this.body_data == null ) {
let Alert = Vue.extend(BasicAlert);
new Alert({el: document.createElement("div"), data: {comment: "조회된 데이터가 없습니다."}});
}
})
.catch(function (error) {
console.log(error);
});
}<template>
<div class="basic_alert_body">
{{comment}}
</div>
<div>
<button name="확인" @onClick="close"></button>
</div>
</template>
<script>
export default {
components: {
BasicButton
},
name: 'BasicAlert',
created() {
},
beforeMount() {
setTimeout(() => {
document.body.appendChild(this.$el)
}, 150);
},
mounted() {
},
data() {
return {
comment: "",
timeout: 0
}
},
methods: {
close() {
this.$destroy()
this.$el.remove()
}
}
}</script>axios 를 사용하다보니 검색이 안되거나 에러가 날경우 팝업창혹은 경고창을 띄울 필요가 생겼다. 컴포넌트 를 만들어서 호출하면 될거 같은데 생각보다 막연했다 ( 단순 구글링으로 중구난방으로 시작하다보니 당연한 결과... )
같은팀 동료에게 도움을 요청 했고 alert 이나 modal 창을 사용할수 있는 방법에 대한 도움을 얻었다.
일단 컴포넌트를 제작한다. 아래는 단순한 alert 을 구현한것이다. 지정한 코멘트와 닫기 버튼 정도이다. 일단 호출부분부터 보면 위에서 Alert 이라는 vue 객체를 extend 하고 그다음에 생성을 한다. 이때 생성을 하는부분에서 data 를 넣어주고 element 를 생성하는 옵션을 같이 컴포넌트로 넘겨준다.
호출이 될 경우 이제 위에 만들어진 vue 컴포넌트가 호출되는데 현재 화면의 child 형태로 창이 열리게 되고 기본적으로 부모창은 회색으로 처리가 된다. 회색 영역을 누르면 자동을 창이 닫히는거 같다.
comment 라는 키로 받은 데이터는 바로 {{comment}} 에 바인딩이 되고 화면에 노출된다. 여기서 중요한건 닫기 버튼 같다.
버튼 확인을 누르면 close 라는 녀석이 호출 되는데 내용은 간단하지만 이해하려면 vue.js 에서 사용하는 전역변수라는 개념을 알아야 한다.
$destroy 를 할경우 이벤트나 속성 값들이 this 에 속한 모든것들이 제거가된다.
$el.remove 를 수행하면 element 가 삭제되면서 alert 창이 사라진다.
라고 이해하고 있다. 아직 깊숙히 vue.js 를 전반적으로 파악한게 아니라 이정도 이해하고 사용중이다.
위에 alert 을 응용하면 modal 창도 충분히 컴포넌트 제작이 가능할거 같다.
반응형'JavaScript > Vue.js' 카테고리의 다른 글
Vue.js + Spring boot ( Thymeleaf 설정 ) feat.nuxt.js (0) 2019.03.26 Vue.js 사용하기 -5( 화면 구성하기-컴포넌트 & event bus ) (0) 2019.02.11 Vue.js 사용하기 -4( 화면 구성하기 - 기본 문법 ) (2) 2019.02.11 Vue.js 사용하기 -3 ( 시작하기 ) (0) 2019.02.01 Vue.js 사용하기 -2 ( 환경 설정 하기 ) (0) 2019.01.31