学习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‘“
它是元素的命名方式(camelCase)吗?我错过了什么。
发布于 2017-08-17 08:31:31
由于要滚动的元素位于组件中,因此应在该组件上实现一个可调用的方法。
例如,在您的chat-messages组件中...
methods: {
scrollToTop () {
this.$el.scrollTop = 0
}
}在您的Vue实例中,为该组件添加一个ref ...
<chat-messages ref="messages"...在addMessage方法中...
this.$refs.messages.scrollToTop()发布于 2020-08-07 05:11:14
我们可以使用scrollIntoView()方法来达到这个目的,例如:
this.$refs.yourRef.$el.scrollIntoView();https://stackoverflow.com/questions/45724709
复制相似问题