Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript vue模板中的数组未更新_Javascript_Arrays_Vue.js - Fatal编程技术网

Javascript vue模板中的数组未更新

Javascript vue模板中的数组未更新,javascript,arrays,vue.js,Javascript,Arrays,Vue.js,我正在vue中创建动态阵列。此数组是从JSON数组在脚本中填充的,但不会在模板中更新。在模板中,它返回空白数组。这是我的密码: <template> <div> {{users}} <!-- this is returning blank --> </div> </template> <script> export default { data(){ return {

我正在vue中创建动态阵列。此数组是从JSON数组在脚本中填充的,但不会在模板中更新。在模板中,它返回空白数组。这是我的密码:

<template>
  <div>
    {{users}} <!-- this is returning blank --> 
  </div>
</template>

<script>
  export default {
    data(){
      return {
        users: []
      }
    },
    created(){
      this.fetchUsers();
    },
    methods:{
      fetchUsers(){
        fetch('api/single')
          .then(res => res.json())
          .then(res => {
            this.users= res.data;
              console.log(this.users); //this is showing the data 
      })
        .catch(err => console.log(err));
   }
 }
};
</script>

{{users}}
导出默认值{
数据(){
返回{
用户:[]
}
},
创建(){
this.fetchUsers();
},
方法:{
fetchUsers(){
fetch('api/single')
.then(res=>res.json())
。然后(res=>{
this.users=res.data;
console.log(this.users);//显示数据
})
.catch(err=>console.log(err));
}
}
};
你可以试试这个。$nextTick()。因为,DOM的更新在Vue中是异步的


你可以试试这个。$nextTick()。因为,DOM的更新在Vue中是异步的。

获取API发送异步请求,所以在从API加载数据之前会显示用户。调用绑定到用户的计算方法。

获取API发送异步请求,因此在从API加载数据之前显示用户。调用绑定到用户的计算方法。

当数据属性值未以正确方式初始化时,会发生这种情况。您应该使用Vue api提供的方法,而不是将数组从提取请求分配给数据属性。由于这种反应性将得以保留。事实上,您甚至可以从数据对象中删除users数组声明,因为vm.$set将覆盖它

因此,您的方法如下所示:

fetchUsers(){
        fetch('api/single')
        .then(res => res.json())
        .then(res => {
            this.$set(this, 'users', res.data) // target, key, value
        })
        .catch(err => console.log(err));
    }

当数据属性值未以正确的方式初始化时,会发生这种情况。您应该使用Vue api提供的方法,而不是将数组从提取请求分配给数据属性。由于这种反应性将得以保留。事实上,您甚至可以从数据对象中删除users数组声明,因为vm.$set将覆盖它

因此,您的方法如下所示:

fetchUsers(){
        fetch('api/single')
        .then(res => res.json())
        .then(res => {
            this.$set(this, 'users', res.data) // target, key, value
        })
        .catch(err => console.log(err));
    }

我认为问题与阵列的反应性有关。尝试使用foreach循环填充数据,或者按照建议使用vm.$set

res.data.forEach(element => {
  this.users.push(element);
});

有关阵列反应性的更多信息,请查看

我认为问题与阵列反应性有关。尝试使用foreach循环填充数据,或者按照建议使用vm.$set

res.data.forEach(element => {
  this.users.push(element);
});
有关数组的更多信息,请查看

fetchUsers()方法实际上运行良好。问题是fatch()中填充的任何内容都没有在fetch()之外得到更新。即使不是在fetchUsers()方法内部,fetchUsers()方法实际上也可以正常工作。问题是fatch()中填充的任何内容都没有在fetch()之外得到更新。甚至不在fetchUsers()方法中