我是新手vuejs3,我尝试使用jsonwith vuejs3,我在视图中显示了课程blog / index,当单击其中的课程时,index它重定向到该课程点击的详细信息,在我的情况下,它给了我错误:Uncaught (in promise) TypeError: Cannot read property 'title' of null。
博客/index.vue
<template lang="">
<div class="row">
<div class="col-md-6" v-for="post in posts">
<h1><router-link :to="{ name: 'post-show', params: { id: post.id, slug: post.slug }}">{{ post.title }}</router-link></h1>
<p class="lead">{{ post.content }}</p>
</div>
</div>
</template>
<script>
export default {
data() {
return {
posts: []
}
},
mounted() {
fetch('http://localhost:5000/posts')
.then(res => res.json())
.then(data => this.posts = data)
.catch(err => console.log(err))
},
}
</script>
Run Code Online (Sandbox Code Playgroud)
博客/show.vue
<template lang="">
<h1>{{ post.title }}</h1>
<p>{{ post.content }}</p>
</template>
<script>
export default {
props: ['id', 'slug'],
data(){
return {
post: null
}
},
mounted() {
fetch(`http://localhost:5000/posts/${this.id}`)
.then(res => res.json())
.then(data => this.post = data)
.catch(err => console.log(err))
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
路由器/index.js
{
path: '/blog/:id/:slug',
name: 'post-show',
component: Show,
props: true
},
Run Code Online (Sandbox Code Playgroud)
数据/db.json
{
"posts": [
{
"id": 1,
"title" : "learn angular",
"slug" : "learn-angular",
"content": "Lorem ipsum dolor sit amet consectetur adipisicing elit. Ratione, possimus."
},
{
"id": 2,
"title" : "learn react",
"slug" : "learn-react",
"content": "Lorem ipsum dolor sit amet consectetur adipisicing elit. Ratione, possimus."
},
{
"id": 3,
"title" : "learn laravel",
"slug" : "learn-laravel",
"content": "Lorem ipsum dolor sit amet consectetur adipisicing elit. Ratione, possimus."
},
{
"id": 4,
"title" : "learn symfony",
"slug" : "learn-symfony",
"content": "Lorem ipsum dolor sit amet consectetur adipisicing elit. Ratione, possimus."
},
{
"id": 5,
"title" : "learn jee",
"slug" : "learn-jee",
"content": "Lorem ipsum dolor sit amet consectetur adipisicing elit. Ratione, possimus."
},
{
"id": 6,
"title" : "learn php",
"slug" : "learn-oracle",
"content": "Lorem ipsum dolor sit amet consectetur adipisicing elit. Ratione, possimus."
}
],
"users": []
}
Run Code Online (Sandbox Code Playgroud)
Jor*_*dan 13
问题出在你的blog/show.vue文件上。
请注意在您的数据中,如何post设置为null。
当您的组件安装时,它会尝试读取post.title,post.content但失败,因为post尚未包含这些属性。
检索和设置发布数据的方法仅在组件安装后运行。
一种方法是不显示<h1>和<p>标签,直到post数据不再null使用类似属性v-if="post"
或者,您可以通过将其设为对象来为您的帖子设置一些默认值:
post: {
title: '',
content: '',
}
Run Code Online (Sandbox Code Playgroud)
这样,当组件安装时,属性title就会content存在。
最后,您可以使用三元:
<h1>{{ post ? post.title: '' }}</h1>
<p>{{ post ? post.content: '' }}</p>
Run Code Online (Sandbox Code Playgroud)
在这种方法中,如果 post 存在,它将呈现属性 - 否则它呈现一个空字符串。
| 归档时间: |
|
| 查看次数: |
10309 次 |
| 最近记录: |