如何在 VueJS 的 HTML 和脚本的其他部分中使用来自 API 响应的 id

Posted

技术标签:

【中文标题】如何在 VueJS 的 HTML 和脚本的其他部分中使用来自 API 响应的 id【英文标题】:How do i use the id coming from the API response in other parts of HTML & Scripts in VueJS 【发布时间】:2021-04-18 04:58:07 【问题描述】:

我正在尝试在不使用任何硬代码的情况下使我的代码动态化。为此,我想使用来自 API 的 id。

这是我的 API 响应:[/infos]

    [
        ...

      
        "id": 7,
        "name": "Highway",
        "price": "High",
        "min": "785",
        "max": "1856",
        "tag": null,
      ,
      
        "id": 8,
        "name": "Lowway",
        "price": "low",
        "min": "685",
        "max": "1956",
        "tag": null,
       

      ...

    ]

这是我的 Component.vue:

<div class="vx-row">
    <div class="vx-col w-full md:w-1/2 mb-base" v-for="info in infos" :key="info.id">
          <vx-card>
             <div class="header">
               <div class="left">
                 <img src="./img/info_8_logo.png" />            <-- Hard coded value ie 8
                 <b>info.name</b>
               </div>
             <div class="right">
                  <vs-button @click="$router.push(name: 'letsCheck', params: viewContentId: '8' ).catch(err => )">Explore</vs-button> 
                          <-- Above as a Hard-coded value ie 8 -->
                   mes.this_is_showing_only_data_of_id8       
             </div>
           </div>
          </vx-card>
      </div>
    </div>

<script>
infos: [],
mes: []
...
created () 
  this.$http.get('/infos')                                           
    .then((response) =>  this.infos = response.data )
    .catch((error) =>  console.log(error) )
   
  this.$http.get('/messages/8/tick')                                  <-- Hard coded value
    .then((response) =>  this.mes = response.data )
    .catch((error) =>  console.log(error) )


</script>

如您所见,我的 Component.vue 显示了 8 张卡片,每张卡片显示的内容与我将 id 硬编码为 8 的内容相同。所以我想知道如何使用来自 API 响应的 id html 和其他脚本中的 /infos 端点。

还要注意,来自 API 的 id 只是一个数字,所以我想知道如何将其转换为字符串。以及如何在其他 HTML 和脚本中使用它。

请帮助我,我想将来自 API 的 id 放到我在 Component.vue 中创建的任何 cmets 中。

【问题讨论】:

【参考方案1】:

最佳实践在这里,您需要为您的消息创建一个新组件,并在组件中作为道具传递 id 并拥有此 id 以动态构建消息组件。 消息.vue

    <template>
             <div class="right">
                  <vs-button @click="$router.push(name: 'letsCheck', params: viewContentId: id ).catch(err => )">Explore</vs-button> 
                         
                   mes.my_key_name       
             </div>
           </template>

<script>
mes: []
...
  props: 
    id: 
      type: String,
      required: true,
    ,
  ,
created ()   
  this.$http.get(`/messages/this.id/tick`)                                 
    .then((response) =>  this.mes = response.data )
    .catch((error) =>  console.log(error) )


</script>

App.vue 将是:

<div class="vx-row">
    <div class="vx-col w-full md:w-1/2 mb-base" v-for="info in infos" :key="info.id">
          <vx-card>
             <div class="header">
               <div class="left">
                 <img :src="`./img/info_$info.id_logo.png`" />            
                 <b>info.name</b>
               </div>
             <message :id="info.id.toString()"></message>
           </div>
          </vx-card>
      </div>
    </div>

<script>
infos: [],
...
created () 
  this.$http.get('/infos')                                           
    .then((response) =>  this.infos = response.data )
    .catch((error) =>  console.log(error) )
   
</script>

我相信我更新了所有硬编码值,并且我按照您的要求将 info id 转换为 String。

请告诉我:)

【讨论】:

是的,涵盖了所有内容。非常感谢,我会检查并通知您。 对于试图在 img 行中编辑我的评论的人,请检查***.com/questions/45880956/… 一切正常,但我希望 App.vue 中的消息本身只包含小内容,那么我如何在 App.vue 中使用它 您能详细解释一下您想要达到的目标吗?不清楚 就像您创建了一个名为 message.vue 的单独组件一样,这在我的情况下不是必需的,我只想在我的 App.vue 组件中使用 API“/messages”端点。我只想提供来自 API /infos 端点的 id。

以上是关于如何在 VueJS 的 HTML 和脚本的其他部分中使用来自 API 响应的 id的主要内容,如果未能解决你的问题,请参考以下文章

如何在 vue js 和 laravel 中使用外部脚本

VueJS 和 SASS - 在脚本中导入和使用 SASS 变量

VueJS - 清理输出以防止跨站点脚本攻击

如何在 vuejs 中上传图片?

如何将外部 JS 脚本添加到 VueJS 组件?

如何在 vuejs 或任何其他解决方案上解决这个数组问题?