【问题标题】:How to update Vue component after it receives dataVue组件收到数据后如何更新
【发布时间】:2020-01-23 13:36:05
【问题描述】:

安装组件后,我会在页面上获取数据。然后,我希望每次用户登录时都能看到我的组件更新(为此我监听此事件)。现在,我从数据库中获取数据,并在 div“ip”中获得了登录用户。但我打算将这些新数据动态添加到我已经收到的数据中。如何动态更新数据?我想在不刷新页面的情况下使用新插入的用户获取页面。此登录用户出现在此处,并且仅在我刷新页面时才被添加。我想在不需要刷新页面的情况下获得它。这是关于使用新道具重新渲染组件。

在模板中

<div v-for="user in users">
    <div class="card-header">{{ user.ip }}</div>
    <div class="card-header">{{ user.name }}</div>
</div>
<div v-html="ip"></div>

在脚本中

export default {
    data() {
        return {
            users: [],
            ip: ''
        }
    },
    mounted() {
        window.Echo.channel('channelName')
            .listen('eventIp', (e) => {
                this.ip = e
            }),
            this.fetchData()
    },
    methods: {
        fetchData() {
            axios
                .get('api/person')
                .then(response => (this.users = response.data))
                .catch(error => console.log(error));
        }
    }
}

【问题讨论】:

  • console.log(e);this.ip=e 之前,输出是什么?
  • @Caddy DZ 它将我发布的数据显示为一个对象('name' 和 'ip')。
  • 然后使用e来更新你的数据而不是使用Ajax,Echo的目的是在动态变化时广播新数据

标签: vue.js


【解决方案1】:

如果 eventIp 只是一个 ip:

<div v-for="user in users">
    <div class="card-header">{{ user.ip }}</div>
    <div class="card-header">{{ user.name }}</div>
    <div v-if="ip==user.ip">online</div>
</div>

如果eventIp包含多个在线ip:

<div v-for="user in users">
    <div class="card-header">{{ user.ip }}</div>
    <div class="card-header">{{ user.name }}</div>
    <div v-for"userIp in ip">
      <span v-if="userIp==user.ip">online</span>
    </div>
</div>

更新: 正如您在 cmets 中解释的那样,您需要收听频道。这个链接https://pusher.com/tutorials/todo-vue-laravel#building-vue-components 是一个很好的教程部分。

当新用户创建时,您需要更多新用户在频道中的数据并将其添加到用户变量中。自动vue渲染成html。

【讨论】:

  • 我想在不刷新页面的情况下获取新插入用户的页面。此登录用户出现在这里
    并且仅在我刷新页面时才添加到
    中。我想在不需要刷新页面的情况下获得它。我知道 React 有一些方法可以解决这个问题。这是关于使用新道具重新渲染组件。
猜你喜欢
  • 2018-04-22
  • 1970-01-01
  • 2020-05-05
  • 1970-01-01
  • 2017-03-06
  • 2017-10-29
  • 2020-11-17
  • 2020-03-25
  • 2022-11-27
相关资源
最近更新 更多