Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Image Replacement
- 일러스트
- 이쁜 웹디자인
- 3D
- 디자인
- 귀여운 웹디자인
- 특이한 웹디자인
- 마우스오버
- 시맨틱 마크업
- 시맨틱
- 배경이 이쁜 웹디자인
- 이미지 리플레이스먼트
- 깔끔한 웹디자인
- 접근성
- mark up
- jQuery
- 사람 일러스트
- 웹디자인
- 마크업
- 우주 웹디자인
- 유니크
- jquery 웹디자인
- 스크롤
- IR기법
- 스크롤 웹디자인
- 스크롤 웹사이트
- 신박한 디자인
- 신박한 웹디자인
- 웹 접근성
- 웹사이트
Archives
- Today
- Total
Play Ground
vue.js axios로 데이터 가져와서 이벤트 걸기 본문
vue.js의 라이프사이클 이해한 후 보기
요약하자면
1. axios로 api를 호출하여 데이터를 가져온 후
2. 해당 데이터를 eventbus를 이용하여 다른 컴포넌트로 값을 넘겨준다.
3. 2번의 그 다른 컴포넌트에서는 eventbus를 created()에서 받아 데이터를 연결해준 후, 원래 걸려있던 이벤트 해제
4. updated()에서 다시 이벤트를 건다.
--------------------------------
webpack, axios, eventbus, datatable를 이용해서
회원을 검색하면 회원검색api를 호출하여 회원정보데이터를 가져온 후
그 결과값을 다른 컴포넌트에 값을 넘기고, datatable을 이용하여 테이블리스트를 만들어줘야하는 상황
검색하는 부분(usersearch.vue)
<template>
...
<input type="text" class="form-control" id="userSearchInput" placeholder="회원을 입력해주세요" @keyup="search = $event.target.value">
<span class="input-group-btn">
<button type="button" class="btn btn-info btn-flat" @click="getPosts">검색</button>
</span>
...
</template>
<script>
export default {
name: 'user-usersearch',
data: function(){
return {
search: ''
}
},
methods: {
getPosts: function () {
this.$http.get('api주소/user_search/' + this.search).then((result) => {
console.log(result)
this.$EventBus.$emit('posts', result.data)
})
}
}
...
}
</script>
데이터 받아서 뿌려주는 부분(info.vue)
<template>
...
<tr v-for="post in posts" v-bind:key="post.id">
<td>{{post.id}}</td>
<td>{{post.name}}</td>
<th>{{post.address}}</th>
<td>{{post.phone}}</td>
<td>{{post.mail}}</td>
<td>{{post.profile}}</td>
</tr>
...
</template>
<script>
var vm = this
export default {
name: 'user-info',
data: function(){
return {
posts: []
}
},
created() {
var vm = this
this.$EventBus.$on('posts', function (data) {
vm.posts = data
$('#userDelete').removeClass('disabled')
$('#postList').DataTable().destroy()
})
},
updated() {
this.$nextTick(function () {
$('#postList').DataTable()
})
},
mounted() {
$('#postList').DataTable()
}
}
</script>
created()는 data와 events가 활성화되어 접근할 수 있는 훅이라고 한다. 그래서 이벤트 버스는 created안에 넣어주는 것이고,
데이터를 가져왔으면 이미 걸려있는 datatable(이벤트)을 해제시켜준다.
그리고 updated()는 컴포넌트의 데이터가 변하여 재 렌더링이 일어날 때 실행되는 훅이라고 한다. 따라서 이벤트 버스를 잡아서 데이터의 변화가 감지되었을 때 datatable(이벤트)를 다시 걸어준다.
nextTick은 모든 화면이 렌더링된 후 실행하는 것을 보장함으로 저기 안에 넣어주면 된다.
'Programming > Vue.js' 카테고리의 다른 글
[vue.js] Eventbus 만들기 (0) | 2018.10.22 |
---|---|
[Vue.js] 페이징 로직 (0) | 2018.10.22 |
[Vue.js] promise 사용하기 (0) | 2018.09.20 |
[Vue.js] class를 만들어 vue객체 사용하기 (0) | 2018.09.20 |
[Vue.js] mixin 전역 등록하기 (0) | 2018.09.20 |
[vue] img src data binding (0) | 2018.09.07 |
vue.js radio button 토글 이벤트 걸기 (0) | 2018.07.12 |
vue.js jquery import syntax error (0) | 2018.07.05 |