javascript - .Vue 组件不会在 laravel 中的每条新消息上刷新
问题描述
我按照以下教程创建了一个聊天应用程序。 https://github.com/ammezie/laravel-chat
一切都是正确的,消息存储在 db 中,显示在推送器桌面的控制台上,所有消息都显示在页面重新加载上。
问题是当我发送一条新消息时,它不会显示在其他用户选项卡中,直到我重新加载页面。我需要使其动态以下是编写 fetch 函数的 app.js 的代码
created() {
this.fetchMessages();
Echo.private('chat')
.listen('MessageSent', (e) => {
this.messages.push({
message: e.message.message,
user: e.user
});
});
},
methods: {
fetchMessages() {
axios.get('/messages').then(response => {
this.messages = response.data;
});
},
addMessage(message) {
this.messages.push(message);
axios.post('/messages', message).then(response => {});
}
这里
以下是组件的聊天视图代码
<template>
<ul class="chat">
<li class="left clearfix" v-for="message in messages">
<div class="chat-body clearfix">
<div class="header">
<strong class="primary-font">
{{ message.user.name }}
</strong>
</div>
<p>
{{ message.message }}
</p>
</div>
</li>
</ul>
</template>
<script>
export default {
props: ['messages']
};
</script>
感谢您的帮助,如果有不清楚的地方我会提供
解决方案
你可以试试。
methods: {
var vm = this;
fetchMessages() {
axios.get('/messages').then(response => {
vm.messages = response.data;
});
},
addMessage(message) {
var vm = this;
vm.messages.push(message);
axios.post('/messages', message).then(response => {});
}
使用 this 内部函数会导致问题,因为它引用该特定函数创建一个全局变量,参考this
希望这可以帮助。
推荐阅读
- c++ - 使用另一个 C++ 函数从 R 包调用 C 函数
- google-chrome - 其他浏览器中的 Bootstrap 4 轮播问题,但不是 Google Chrome
- python - cx_Oracle 中的插入语句在全局临时表中不产生记录
- python-3.x - 将十进制 (ASCII) 数字转换为 128 位二进制 (hex) 值
- apache - 让 Apache 允许通过 HTTPS 访问 Express API
- r - 使用 dplyr 函数进行管道时使用方括号进行子集化
- react-native - Redux 不使用异步方法更新 componentDidMount 中的 this.props
- javascript - 如果未选择文件,则不会调用 OnSubmit
- nginx - NGINX:如何在反向代理中添加查询字符串?
- c# - 使用 selenium webdriver 时新窗口上的登录页面