반응형
Vue 스크롤 div to top inside 메서드
Vue를 배우다.새 대화 항목이 발견되면 맨 위로 스크롤하기 위해 대화 창 div를 가져오려고 합니다.
Vue 컴포넌트는 다음과 같습니다.
const app = new Vue({
el: '#toolbar-chat',
data: {
messages: []
},
created() {
this.fetchMessages();
Echo.private(chat_channel)
.listen('ChatMessageSent', (e) => {
this.messages.unshift({
message: e.data.message,
player: e.data.player.nickname
});
});
},
methods: {
fetchMessages() {
axios.get(chat_get_route)
.then(response => {
this.messages = response.data;
});
},
addMessage(message) {
this.messages.unshift(message);
this.$nextTick(() => {
this.$refs.msgContainer.scrollTop = 0;
});
axios.post(chat_send_route, message)
.then(response => {
console.log(response.data);
});
}
}
});
내 채팅 메시지 템플릿
<template>
<div ref="msgContainer" class="toolbar-chat">
<div class="row">
<div class="col-xs-12" v-for="message in messages">
<strong class="primary-font">
{{ message.player.nickname }}:
</strong>
{{ message.message }}
</div>
</div>
</div>
</template>
<script>
export default {
props: ['messages']
};
</script>
내 채팅 전송 템플릿
<template>
<div class="input-group input-group-sm">
<input id="btn-input" type="text" class="form-control" value="" required="required" maxlength="140" placeholder="Type your message here..." v-model="newMessage" @keyup.enter="sendMessage">
<div class="input-group-btn">
<button class="btn btn-primary" type="button" id="btn-chat" @click="sendMessage">
<i class="fa fa-paper-plane"></i>
</button>
</div>
</div>
</template>
<script>
export default {
props: ['player'],
data() {
return {
newMessage: ''
}
},
methods: {
sendMessage() {
this.$emit('chatmessagesent', {
player: this.player,
message: this.newMessage
});
this.newMessage = ''
}
}
}
</script>
그리고 내 페이지에 템플릿이 포함되어 있다.
<div class="col-xs-12 col-md-4" id="toolbar-chat">
<chat-messages :messages="messages"></chat-messages>
<chat-form v-on:chatmessagesent="addMessage" :player="{{ Auth::user() }}"></chat-form>
</div>
목록에 OK 메시지가 추가되지만 다음 오류가 발생합니다.
[Vue warn] :nextTick 오류: "TypeError: 정의되지 않은 'scrollTop' 속성을 설정할 수 없습니다."
요소의 이름(camel Case)이 그렇게 되어 있습니까?내가 뭘 놓쳤지?
스크롤할 요소가 컴포넌트 내에 있으므로 호출할 수 있는 메서드를 해당 컴포넌트에 구현해야 합니다.
예를 들면,chat-messages
컴포넌트...
methods: {
scrollToTop () {
this.$el.scrollTop = 0
}
}
그리고 Vue 인스턴스에서ref
그 컴포넌트에 대해서...
<chat-messages ref="messages"...
또,addMessage
메서드...
this.$refs.messages.scrollToTop()
이러한 목적으로 scrollIntoView() 메서드를 사용할 수 있습니다.예를 들어 다음과 같습니다.
this.$refs.yourRef.$el.scrollIntoView();
언급URL : https://stackoverflow.com/questions/45724709/vue-scroll-div-to-top-inside-method
반응형
'programing' 카테고리의 다른 글
Apollo Client를 사용하여 상태 업데이트 (0) | 2022.05.28 |
---|---|
기본값을 옵션 선택 메뉴로 설정 (0) | 2022.05.28 |
Nuxt에서 API 키를 보호하고 확인하는 방법 (0) | 2022.05.28 |
C의 칠드 연산자 (0) | 2022.05.28 |
왜 'int'는 C++에서는 정상적으로 컴파일되지만 C++에서는 컴파일되지 않는가? (0) | 2022.05.28 |