Vue V-For 返回未定义的组件属性

Posted

技术标签:

【中文标题】Vue V-For 返回未定义的组件属性【英文标题】:Vue V-For returning undefined component properties 【发布时间】:2020-11-22 19:46:02 【问题描述】:

我通常不会为看起来很简单的东西发帖子,但是我整天都在我的 Vue 组件中使用这个 v-for 并且我仍然无法找出问题所在。父组件有一个正确的属性,包含它传递给子组件的帖子数组,但是创建的子组件太多(原始对象仅包含 3 个数组),并且所有这些子组件的属性都未定义,尽管在别处使用这个精确的 v-for 代码没有问题。

这是父组件:

<template>
      <div class="user-post-section-cell-container">
        <user-post
            v-for="(post, index) of posts"
            :image-src="post.imageSrc"
            :key="index"
            :id="post.id"
            :caption="post.caption"
            :location="post.location"
            :href="post.href"
            :friend-name="post.friendName"
            :friend-img-src="post.friendImgSrc"
        >
        </user-post>
      </div>
</template>
<script>
  export default 
    props: ['posts'],
  
</script>

这是父组件的父组件,因为上面的组件是嵌套的,再一次,在另一个组件下,它是如何向下传递其 post 数组的;

<template>
  <div>
    <user-post-section :posts="friendposts"</user-post-section>
  </div>
</template>
<script>
  export default 
    props: ['friendposts'],
  
</script>

这是创建数组的实际视图文件;

<dashboard friendposts="[@foreach ($profiledata['friendposts'] as $friendpost)@foreach($friendpost as $post)imageSrc:'/storage/post_images/$post->picture_link',id:'$post->id',caption:'$post->caption_content',location:'ucfirst($post->location)',href:'/posts/$post->id',friendName:'$post->poster_username',friendImgSrc:'/storage/profile_images/$post->post_user_profile_picture',@endforeach @endforeach]"></dashboard>

这是在浏览器上的 Vue 检查中的 posts 属性的外观;

posts: "[
    
        "imageSrc": "/storage/post_images/5823896B-7980-4BBA-BB5B-E9623D194B22_1579753908.jpeg",
        "id": "11",
        "caption": "Caption",
        "location": "Location",
        "href": "/posts/11",
        "friendName": "test",
        "friendImgSrc": "/storage/profile_images/IMG-0030 (1)_1583849211_1583851620.JPG"
    ,
    
        "imageSrc": "/storage/post_images/29985A50-E78F-42EF-B2FF-2D426B9D4FF0_1583024890.jpeg",
        "id": "17",
        "caption": "Caption2",
        "location": "Location2",
        "href": "/posts/17",
        "friendName": "Testt",
        "friendImgSrc": "/storage/profile_images/Rising-Sun-Circle-Jdm-Japanese-Vinyl-Decal-Sticker_1583024753.jpg"
    ,
    
        "imageSrc": "/storage/post_images/28E01285-70C9-41CF-921C-C7E4DC8D946B_1581958302.jpeg",
        "id": "14",
        "caption": "Caption3",
        "location": "Location3",
        "href": "/posts/14",
        "friendName": "Testt",
        "friendImgSrc": "/storage/profile_images/Rising-Sun-Circle-Jdm-Japanese-Vinyl-Decal-Sticker_1583024753.jpg"
    ,
    
        "imageSrc": "/storage/post_images/2001_1585774742.png",
        "id": "21",
        "caption": "Caption4",
        "location": "Location4",
        "href": "/posts/21",
        "friendName": "Walker",
        "friendImgSrc": "/storage/profile_images/blank.jpg"
    
]"

很抱歉包含 JSON 代码的这种意大利面条式排列,但重点是表明用于构建组件数组的对象格式正确,正如我所预料的那样,因为我之前使用过这两个组件,并且它们按预期工作,但现在我将它嵌套在另一个组件中,该组件向下传递数据,现在它不起作用。

这是子组件的属性字段

props: ['href', 'imageSrc', 'id', 'caption', 'location', 'friendImgSrc', 'friendName'],

老实说,我不知道发生了什么,因为这两个组件都可以独立运行,但是现在嵌套时它不再起作用,尽管据我所知 Vue 文档的格式正确。

【问题讨论】:

可以添加父子组件代码吗? 我可以,但我没有看到相关性,我提供了连接这两个组件的所有代码。为其容器提供样式有什么帮助?子组件的属性未定义,因此它的样式无关紧要。我将添加父母的父代码,至少是相关部分。 是的,只是您收到帖子并传递给孩子的部分,从我的角度来看,您当前的代码看起来不错 一件事是您在问题中添加的帖子 json 被 " 包围,这意味着一个字符串,也许您只是从浏览器复制了字符串响应,它实际上是您组件中的一个对象数组? 你介意在你的组件被挂载时放置console.log吗? export default props: ['friendposts'], mounted () console.log(this.friendposts); , 【参考方案1】:

想通了,当然,简单的答案总是正确的。事实证明(因为我现在必须搜索文档才能发现)在属性传递中使用冒号非常重要。我的页面是这样写的:

<dashboard friendposts="[insert array of posts here]"></dashboard>

当它必须这样写时:

<dashboard :friendposts="[insert array of posts here]"></dashboard>

对于将属性与 :property、property 和 v-bind:property 互换传递给组件,我一直很漠不关心,因为这似乎并不重要。显然是的。希望这有帮助

【讨论】:

是的,有点尴尬,必须阅读不同通过方法之间的差异。最简单的解释通常是正确的。 你必须添加:来传递一个变量,并省略传递静态文本【参考方案2】:

v-for 指令使用in 而不是of 保留字

【讨论】:

这是不正确的,Vue 文档状态要么是可以互换的。 vuejs.org/v2/guide/list.html 你的意思是v-for="(post, index) of posts"是正确的而v-for="(post, index) in posts"是错误的? @ChristianCarrillo、inof 都是 v-for 的正确语法

以上是关于Vue V-For 返回未定义的组件属性的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 VueJS 中的“未定义属性或方法”错误

v-for json 中的切片对象 - Vue 警告:TypeError:无法读取未定义的属性“切片”

Vue 组合 API:无法读取未定义的属性“$createElement”

无法在 vue.js 中读取“未定义”的属性

v-for 和自定义组件的未定义行为

Vue.js:子组件改变状态,父组件显示属性未定义