【问题标题】:[Vue warn]: Error in render: “TypeError: Cannot read property ‘name’ of undefined”[Vue 警告]:渲染错误:“TypeError:无法读取未定义的属性‘名称’”
【发布时间】:2018-10-01 07:01:28
【问题描述】:

我得到了错误

TypeError:无法读取未定义的属性“名称”

如果我深入对象。

时间线.vue

<template>
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="card card-default">
                <div class="card-header">Timeline</div>

                <div class="card-body">
                    <post v-for="post in posts" :key="post.id"></post>
                </div>
            </div>
        </div>
    </div>
</div>
</template>

<script>
import Post from './Post.vue'

export default {
    data () {
        return {
            posts: []
        }
    },
    components: {
        Post
    },
    mounted() {
        this.$http.get('/posts').then((response) => {
            console.log(response.body)
            this.posts =response.body
        })
    }
}
</script>

post.vue

<template>
<div class="media">

    <div class="media-left">

    </div>
    <div class="media-body">
        <strong>test</strong>
        <strong>{{ post.user.name }} </strong> 
    </div>
</div>
</template>

<script>
export default {
   props: [
        'post'
    ]
}
</script>

那为什么我会收到错误消息? 我想 {{ post.user.name }} 有问题。

【问题讨论】:

  • 您应该发布从/posts 路由执行的代码。但是,如果我不得不猜测,您并没有加载发布用户关系。因此,您可能应该在控制器中使用急切加载Posts::with('user')-&gt;get()。当你在 PHP 中编写 $post-&gt;user-&gt;name 时,Laravel 会确保用户被即时加载,但如果你在控制器中返回 JSON 响应而没有加载用户,客户端 JS 代码将无法加载该关系数据。
  • 添加一个帖子数组或一个帖子作为示例会有所帮助
  • 是的。我检查localhost:8888/posts。它显示 [{"id":1,"user_id":1,"body":"Necessitatibus cumque pariaatur in excepturi。","created_at":"2018-04-20 07:48:56","updated_at": "2018-04-20 07:48:56","user":{"id":1,"name":"eunice","email":"eunice@gmail.com","created_at":"2018 -04-05 08:20:13","updated_at":"2018-04-05 08:20:13"}},
  • 我的 post 控制器低于 public function index(Request $request, Post $post) { return $post->with(['user'])->latestFirst()->get(); }

标签: vue.js


【解决方案1】:

您需要像这样在模板中传递 post 道具。否则在子组件(帖子)中未定义。

<div class="card-body">
    <post 
        v-for="post in posts" 
        :key="post.id"
        :post="post">
    </post>
</div>

【讨论】:

  • 否则在子组件中未定义这是不正确的,子组件中的prop='post'='post'如果通过post会是一个字符串喜欢&lt;post post="post"&gt;;这就是为什么错误在user.name 而不是post.user
猜你喜欢
  • 2019-12-01
  • 2021-02-17
  • 2018-07-14
  • 2021-03-21
  • 2021-08-18
  • 2020-09-17
  • 2020-01-01
  • 1970-01-01
相关资源
最近更新 更多