Vue.js 2 数据未显示在模板中

Posted

技术标签:

【中文标题】Vue.js 2 数据未显示在模板中【英文标题】:Vue.js 2 data not displayed in the template 【发布时间】:2022-01-22 17:22:17 【问题描述】:

我正在使用带有 axios 的 vue.js 2 / vue-cli。我的帖子显示(在墙上)时遇到问题。我已经提出了我的 axios 请求,已经获取了我的数据(在控制台中),我已经编写了我的模板并且......没有显示任何内容......非常感谢你的帮助

我的模板:

<template>
  <v-layout column>
    <v-flex xs4>
      <panel title="The Wall">
        <p v-for="post in posts" :key="post.index"> post.title  -  post.content </p>
      </panel>
    </v-flex>
  </v-layout>
</template>

我的脚本:

<script>
import Panel from '../components/Panel'
import PostService from "../services/PostService.js";

export default 
  components: 
    Panel
  ,
  data() 
    return 
     posts: null
    
  ,
  async mounted() 
      this.posts = (await PostService.getAllPosts()).data;
  

</script>

【问题讨论】:

@ziouzuw15 确保您的 API 正在返回数据。您可以检查其他事情没有错误 - jsfiddle.net/hareshhanat_27/9bje87gn/6 【参考方案1】:

例如添加一个名为 cidItem 的数据属性并将其绑定到您的道具,如下所示

<template>
  <div id="app" class="container" :cid="cidItem">

    <Images :cid="cidItem" />

    <Video :cid="cidItem"  />

    <TextType :cid="cidItem"  />

    <Card :cid="cidItem"  />

  </div>
</template>

<script>
  import axios from 'axios';
  import Images from "./components/Images";
  import Video from "./components/Video";
  import TextType from "./components/TextType";
  import Card from "./components/Card";

  export default 
    name: 'app',
    props: ["cid"],
    components: 
      Images,
      Video,
      TextType,
      Card
    ,
    mounted() 
      axios(method: "GET", "url": this.contentDeliveryUrl).then(result => 
          // eslint-disable-next-line
          this.content = amp.inlineContent(result.data)[0];
          console.log(this.content)
        , error => 
          console.error(error);
        );
    ,
    data() 
      return 
        contentDeliveryUrl: 'https://c1.adis.ws/cms/content/query?fullBodyObject=true&query=%7B%22sys.iri%22%3A%22http%3A%2F%2Fcontent.cms.amplience.com%2F$this.cid%22%7D&scope=tree&store=testing',
        content: [],
        cidItem:'7e4301de-9c6e-4fab-9e68-3031b94d662d'
      
    
  
</script>

由于您的组件具有相同的结构,我建议使用mixins,创建一个名为 myMixins.js 的文件并在其中添加以下代码:

const myMixins = 
 props:['cid'],
  mounted() 
    axios(
      method: "GET",
      "url": this.contentDeliveryUrl
    ).then(result => 
      // eslint-disable-next-line
      this.content = amp.inlineContent(result.data)[0];
      console.log(this.content)
    , error => 
      console.error(error);
    );
  ,
  data() 
    return 
      contentDeliveryUrl: 'https://c1.adis.ws/cms/content/query?fullBodyObject=true&query=%7B%22sys.iri%22%3A%22http%3A%2F%2Fcontent.cms.amplience.com%2F$this.cid%22%7D&scope=tree&store=testing',
      content: []
    
  


export default mixins;

并在每个组件内添加:

import myMixins from './myMixins'
    export default
          ....
         mixins: [myMixin]
      

【讨论】:

非常感谢纳德,但您的回答对我来说似乎很复杂。实际上我设法检索了我需要的数据为什么我应该为他们使用组件?

以上是关于Vue.js 2 数据未显示在模板中的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 6 + Vue.js 无法挂载组件:未定义模板或渲染函数

Vue js 2-无法安装组件:未定义模板或渲染功能

Vue js模板标签未呈现

Vue.js:为啥我的单文件组件没有在我的模板中呈现/显示

Vue.js - 组件模板不使用 v-for 渲染

vue 2.0 无法挂载组件:未定义模板或渲染函数