json数据无法进入Vue路由器

时间:2019-06-22 12:40:32

标签: vue.js vue-router json-server

以下是我用于练习API调用的JSON数据。但是,当我尝试加载JSON数据时,我无法做到这一点。

我不知道为什么使用data(){.....

data.json无法在网络上显示,但是在控制台中,data.json已被读取 像这样的img:

https://i.imgur.com/Hn41K92.png


我的data.json是:

{
  "contents": [
    {
      "content": "456",
      "id": 2
    }
  ]
}

//This is my Vue.js

let List={
      template:
      `<div>
        <p>
          <input type="text" v-model.trim="input">
          <a href="javascript:;" v-on:click="createHandler">Create</a>
        </p>
      <ol>
         <li v-for="(item,index) in contents" :key="item.id">
            {{ item.content }}
        </li>
      </ol>
      </div>`,
      data() {
        return {
          input: '',
          contents:[]
        };
      }
    let router= new VueRouter({
        routes:[
          {
            path:'/',
            name:'list',
            component:List
          },
          {
            path:'/update/:id',
            name:'update',
            component:Edit
          },
          {
            path:'*',
            redirect:'/'
          }
        ]

    })
      new Vue({
        el: "#app",
        router:router,
        mounted() {
          axios.get('http://localhost:3000/contents').then((res) => {
            console.log(res.data);
            this.contents = res.data;
          })
        }
      })
<!-- This is my HTML -->

<div id="app">
      <router-view></router-view>
    </div>
   

1 个答案:

答案 0 :(得分:0)

这是Jsfiddle

首先,您需要声明一个vue组件...。因为您拥有的let list = {...}不是组件,并且路由器无法识别它, 而且您的vue实例数据不是您的组件数据...您需要将数组作为prop ....这是您的操作方法:

var list = Vue.component('list',{
      template:
      `<div>
        <p>
          <input type="text" v-model.trim="input">
          <a href="javascript:;" v-on:click="createHandler">Create</a>
        </p>
      <ol>
         <li v-for="(item,index) in contents" :key="item.id">
            {{ item.content }}
        </li>
      </ol>
      </div>`,
      props : ['contents'],
      data() {
        return {
          input: '',
        }
       }
      })

  let router= new VueRouter({
    routes:[
      {
        path:'/',
        name:'list',
        component:list
      },
      {
        path:'/update/:id',
        name:'update',
        component:Edit
      },
      {
        path:'*',
        redirect:'/'
      }
    ]
  })

   new Vue({
    el: "#app",
    router:router,
    data(){
      return {
        contents : []
      }
    },
    mounted() {
      axios.get('http://localhost:3000/contents').then((res) => {
       this.contents = res.data
      })
    }
  })
<div id="app">
      <router-view :contents = "contents"></router-view>
    </div>