当前位置: 首页 > 知识库问答 >
问题:

为什么在vue中使用v-if时,API数据显示为未定义。js?

阴迪
2023-03-14

样板

<template>
<div class="profile-container">
    <div class="theme-container">
      <img class="theme" src="#" alt="PH">
    </div>
    <div class="profile-pic-container">
      <img class="profile-pic" :src="responseData.profile_pic" alt="PH">
    </div>
    <div class="profile-info-container">
      <div class="follow-message-button-container">
        <button class="direct-message-button btn"><svg><use href="#chat-icon"></use></svg></button>
        <Follow v-if="responseData.followers.includes($store.state.userId)"></Follow>
      </div>
      <h3 class="profile-username">@{{responseData.username}}</h3>
      <p class="profile-bio">{{responseData.bio}}</p>
      <div class="follower-following-count">
        <a href="#" class="follower-count">Followers: {{responseData.followers.length}}</a>
        <a href="#" class="following-count">Following: {{responseData.following.length}}</a>
      </div>
    </div>
  </div>
</template>

响应数据。追随者。长度正常工作,但响应数据。追随者。包括($store.state.userId)不包括。它给了我一个错误,说:

无法读取未定义的属性包含

剧本

<script>
import Follow from "@/components/Follow";
import getAPICall from "@/mixins/getAPICall";
import getSecondAPICall from "@/mixins/getSecondAPICall";
import Post from "@/components/Post";

export default {
  name: "Profile",
  components: {Post, Follow},
  data() {
    return {
      list: [],
      responseData: {},
      responseData2: {},
      APIUrl: `api/user/${this.$route.params.userId}`
    }
  },
  methods: {
  },
  mixins: [getAPICall, getSecondAPICall],
  created() {
    this.getAPICall(this.APIUrl)
    this.getSecondAPICall(`api/user-post-list/${this.$route.params.userId}`)
  }
}
</script>

这就是我的axios api调用的样子

混血儿

import {getAPI} from "@/axios.api";
import store from "@/store";

export default {
    data() {
        return {
            getAPICall(APIUrl) {
                getAPI.get(APIUrl, {headers: {Authorization: `Bearer ${this.$store.state.accessToken}`}}
                ).then(response => {
                    this.responseData = response.data
                }).catch(err => {
                    console.log(err)
                    store.dispatch('useRefreshToken'
                    ).then(_ => {
                        console.log(_)
                        getAPI.get(APIUrl, {headers: {Authorization: `Bearer ${this.$store.state.accessToken}`}}
                        ).then(response => {
                            this.responseData = response.data
                            }).catch(err => {
                                console.log(err)
                            })
                    }).catch(err => {
                        console.log(err)
                    })
                    }
                )
            }
        }
    }
}

当我在created()钩子中控制台log responseData时,我得到一个空代理。

当我将它登录到挂载的钩子中时,我会得到一个具有正确数据的代理对象,但是如果我尝试从挂载的钩子调用API mixin,我仍然会得到与以前相同的错误,我的其余页面会中断。

浏览器中的Console logging responseData返回未定义。

共有3个答案

洪博涛
2023-03-14

您的代码中几乎不需要更改,如followers:[]数据()中设置了返回

data() {
    return {
      list: [],
      responseData: {followers: []},
      responseData2: {},
      APIUrl: `api/user/${this.$route.params.userId}`
    }
  },

曾喜
2023-03-14

问题就在这里,

回答,塔塔。渲染时不会立即发生跟随者。因为api调用响应需要时间。这样替换那条线

  <Follow 
    v-if="responseData.followers && responseData.followers.includes($store.state.userId)">
    </Follow>

也许您应该同步调用这些api,但这取决于您的需求。如果这两个api之间存在任何依赖关系,那么应该同步调用,但在其他任何情况下都可以。

//asynchronous operation

    created() {
        this.getAPICall(this.APIUrl)
        this.getSecondAPICall(`api/user-post-list/${this.$route.params.userId}`)
      }

//synchronous operation
async created() {
   await this.getAPICall(this.APIUrl)
   await this.getSecondAPICall(`api/user-post-list/${this.$route.params.userId}`)
  }
梁宪
2023-03-14

尝试确保你有响应数据。当vue首先创建模板时,它正在reponseData中查找属性。在这种情况下,它没有找到属性。我曾几次面对这样的问题。页面在api获取数据之前呈现。声明响应Data: null并检查

<div class="profile-container" v-if=" responseData !== null">
 类似资料:
  • 问题内容: 我查看了android文档,并查看了StackOverflow中的所有答案,但是,我似乎无法理解为什么我尝试显示的通知没有显示。每当我单击按钮时,应用程序就会崩溃,而不是显示通知,而有人可以告诉我为什么会发生这种情况吗? 这是堆栈跟踪 问题答案: 根据错误消息,您不能将其用作通知通道的ID-该名称专门为未定位API 26或更高版本的应用程序保留,用于发布未连接任何通道的所有通知。 您可

  • 问题内容: 在严格模式下使用javascript时,为什么在匿名函数中未定义此函数?我知道为什么这样做可能有意义,但是我找不到任何具体答案。 例: 问题答案: 这是因为,在ECMAscript 262第5版之前,如果使用的人忘记使用该关键字,那会造成很大的混乱。如果在ES3中调用构造函数时忘了使用,请引用全局对象(在浏览器中),然后用变量破坏全局对象。 这是可怕的行为等人在ECMA决定,只是为了集

  • 在下面的简单示例中,如果脚本中未设置条件,则运行脚本会打印“True”。然而,人们会期望它打印“False”。这种行为的原因是什么?

  • 问题内容: 我有一个javascript类,每个方法都返回一个Promise。我想知道为什么在和中未定义。有没有更正确的方法来编写此代码? 我可以使用以下方法解决此问题: 但是不能完全确定为什么有必要。正在消灭? 问题答案: 始终是调用方法的对象。但是,将方法传递给时,您不会调用它!该方法将存储在某个地方,稍后再从那里调用。如果要保存,则必须这样做: 或者,如果您必须在ES6 之前的版本中进行操作

  • 问题内容: 我有以下JavaScript代码: 我希望它应该输出以下输出: 但是,它打印以下内容: 为什么在第一次迭代后打印“未定义”?重要说明: 仅 当在JavaScript控制台中执行代码时,我 才会 看到这种行为。如果它是页面的一部分,则可以正常工作。 问题答案: 这是因为“ printCounter()”函数本身返回。那是控制台告诉您表达式的结果。 通过添加到末尾来更改“ printCou

  • 同事们,你能帮我做注释吗?我的目标是将数据库事务管理传递给Spring,并在当前情况下将数据保存在数据库中。 我在DAO类中有两种方法: 服务方式: 我有一个测试,调用这两种方法。我可以使用方法从表中读取数据。但是调用方法后没有保存数据。这是我的问题。当我取消注释中与事务相关的代码时,一切正常。正如我所理解的,在这种情况下,Spring事务管理器不起作用。 如何使用spring@Transacti