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

Vue是否让axios使用键值从阵列获取和显示数据?

林俊英
2023-03-14

我有一张用户档案卡,可以在盒子里显示不同的测量值,比如温度、体积和重量。

目前,我正在从axios GET请求中获取每个用户的名称,然后我需要获取该数据中的ID,并使用该ID执行另一个GET请求,该ID为我提供性能数据,在该数据中,我获得了一个性能ID,我需要使用该ID来获取最终的测量数据数组。

我想知道如何才能仅为具有性能Id的用户发出最后一个GET请求,然后获取测量数据并显示在每个测量框的每个用户配置文件{具有测量数据)中?

它看起来像这样:

  1. 我在vuex中发出第一个axios请求,并使用v-for显示每个用户名:GET api/profiles,返回:
"data": [
        {
            "id": 1,
            "name": "Joe",
        },
        {
            "id": 2,
            "name": "Max",
        },  
<div class="outer"  v-for="(item, index) in profiles" :key="item.id" >
 <p> User Name: {{ item.name }}</p> 
mounted() {
this.$store.state.profiles.forEach((item, index) => {
        axios.get('api/performance/' + this.profile[index].id)
            .then(response => {
            this.performanceId = response.data.data.id
          })
    });
}
 "data": {
        "id": 1,
        "profile_id": 2,
        .....other keys and values
      }
"data": {
        "profileID": "2",
        "perfomanceID": "1",
        "data": [
            {
                "key": "temp",
                "data": "37",
            },
            {
                "key": "vol",
                "data": "22",
            },
            {
                "key": "weight",
                "data": "200",
            },

然后,我希望每个数据点显示在框中:

<div class="outer"  v-for="(item, index) in profiles" :key="item.id" >
    <p> User Name: {{ item.name }}</p> 
    <div class="box 1">Temperature: </div>
    <div class="box 2">Volume: </div>
    <div class="box 3">Weight: </div>
</div>

It would like this for Max's profile:
User Name: Max
  Temperature: 37
  Volume: 22
  Weight: 200

任何帮助都将不胜感激,谢谢!

共有1个答案

钦英发
2023-03-14

如果我没弄错的话,我会这么做的。

假设除了先发出请求之外,没有办法检查用户是否具有性能ID,那么您可以拥有一个data()prop,例如,默认情况下,它被设置为false。一旦您查询API的性能ID,您就可以检查它是否返回了任何内容,以及它是否只是将hasPeractice细节设置为true。然后,您只需使用v-ifv-show指令来呈现配置文件的性能细节部分。

像这样的东西

data() {
  return { hasPerformanceDetails: false }
},
created() {
  this.populateProfile()
},
methods: {
  populateProfile() {
    // Call the measurements endpoint and check if response is empty or not
    if (apiResponse != null) {
      this.hasPerformanceDetails = true;
    }
  }
}

在你的代码中

<div class="outer" v-for="(item, index) in profiles" :key="item.id" >
  <p> User Name: {{ item.name }}</p>
  <div v-if="hasPerformanceDetails" class="performance-wrapper">
    <div class="box 1">Temperature: </div>
    <div class="box 2">Volume: </div>
    <div class="box 3">Weight: </div>
  </div>
</div>

请记住,最好在created()hook上调用API,因为这是在任何东西呈现或装入DOM之前。参考此答案。Vue将执行该请求,并且只有在所有数据都存在后,它才会退出created()钩子并修改data()中的项目。

你也可以使用v-show.v-if将直接不呈现任何内容,v-show将具有超文本标记语言中的部分,但使用show隐藏它:无

或者,如果您希望性能包装器div总是在那里,但只是空的,您可以使用三元运算符代替

<div class="outer" v-for="(item, index) in profiles" :key="item.id" >
  <p> User Name: {{ item.name }}</p>
  <div class="box 1">Temperature: {{ hasPerformanceDetails ? item.temp : "Not available" }}</div>
  <div class="box 2">Volume: {{ hasPerformanceDetails ? item.volume : "Not available" }}</div>
  <div class="box 3">Weight: {{ hasPerformanceDetails ? item.weight : "Not available" }}</div>
</div>
 类似资料:
  • 我正在创建一个电子学习网站,那里有你可以选择的课程卡片。这是我的密码 课程ist.vue 我的问题是我无法从API链接获取数据- 我想知道我做错了什么。我也尝试使用{{list}}来获取数据,但没有成功。我现在的目标是得到所有的数据,即使它看起来很乱。抱歉我英语不好,谢谢你!

  • 下面的代码在web浏览器中工作,我可以使用v-for检索json数据: 所以我尝试在nativescript vue与ListView这样: 但它根本无法检索数据或错误消息。 有什么要我补充的吗? 我正在路由器上使用NativeScip vue cli模板,因此我已经插入了以下依赖项: 从axios导入axios; 从“vue axios”导入VueAxios; Vue.use;

  • 我正在尝试使用Vue和Axios的GET请求从我们的业务服务器获取一些数据。但是,我遇到了401未经授权的错误。当我使用内部号登录时,我能够使用RESTED获取这些数据。我已经看了这篇文章:如何使用axios发送Basic Auth,但没有解决方案对我有用。这是我发出get请求的代码: 我也尝试过不使用“标题”。这是错误消息: 希望有人有主意,因为我不知所措。

  • 大家好,所以我无法将此API中的数据显示到Vue引导表中。 这给了我一个错误:“属性或方法“products”未在实例上定义,但在呈现期间被引用。请通过初始化属性,确保此属性在数据选项或基于类的组件中是被动的。” 问题出在我的应用程序中。vue I已在实例上定义了产品。所以我不明白为什么它会给我这个错误。 这是我的应用程序。vue 分页组件 如果有人能帮助我或指导我,那将是非常感谢的

  • 我试图从我的对象中得到一些东西,但我写的东西不起作用。有什么建议吗?谢谢

  • 问题内容: 我正在用Java写一个简单的编辑文本。当用户打开文件时,将在中打开文件。我执行以下操作来保存打开的文件: 将从何处接收值,例如:。 我有一堂课: 现在,在此类中,我需要获取存储在中的值。我怎样才能做到这一点? 问题答案: 要从地图获取所有值: 要从地图中获取所有条目,请执行以下操作: Java 8更新: 处理所有值: 要处理所有条目: