【问题标题】:Passing id parameter from Laravel Collection to Vue Component将 Laravel 集合中的 id 参数传递给 Vue 组件
【发布时间】:2020-12-24 01:04:24
【问题描述】:

在我的 Blade.php 文件中,我目前有一个变量 $item,当转储时等于:

Illuminate\Database\Eloquent\Collection {#2313 ▼
  #items: array:48 [▶]
}

然后在我的 Blade.php 文件中,我调用了一个 Vue 组件并尝试绑定并传递一个路由(路由应该通过它在 Vue 中的 id 动态呈现一个项目),它看起来像:

 <my-items
   :route="{{ json_encode(route('items.show', ['id' => $item->id])) }}"
  ></my-items>

但是当我重新加载我的页面时,我收到了这个错误:

Property [id] does not exist on this collection instance.

$items 转储

Illuminate\Database\Eloquent\Collection {#2371 ▼
#items: array:48 [▼
0 => App\Items {#2351 ▶}
1 => App\Items {#2350 ▶}
2 => App\Items {#2349 ▶}
3 => App\Items {#2348 ▶}
4 => App\Items {#2347 ▶}
5 => App\Items {#2346 ▶}
6 => App\Items {#2345 ▶}
7 => App\Items {#2344 ▶}
8 => App\Items {#2343 ▶}
9 => App\Items {#2342 ▶}
10 => App\Items {#2341 ▶}
11 => App\Items {#2340 ▶}
12 => App\Items {#2339 ▶}
13 => App\Items {#2338 ▶}
14 => App\Items {#2337 ▶}
15 => App\Items {#2336 ▶}
16 => App\Items {#2335 ▶}
17 => App\Items {#2334 ▶}
18 => App\Items {#2333 ▶}
19 => App\Items {#2332 ▶}
20 => App\Items {#2331 ▶}
21 => App\Items {#2330 ▶}
22 => App\Items {#2329 ▶}
23 => App\Items {#2328 ▶}
24 => App\Items {#2327 ▶}
25 => App\Items {#2326 ▶}
26 => App\Items {#2325 ▶}
27 => App\Items {#2324 ▶}
28 => App\Items {#2323 ▶}
29 => App\Items {#2322 ▶}
30 => App\Items {#2321 ▶}
31 => App\Items {#2320 ▶}
32 => App\Items {#2319 ▶}
33 => App\Items {#2318 ▶}
34 => App\Items {#2317 ▶}
35 => App\Items {#2316 ▶}
36 => App\Items {#2315 ▶}
37 => App\Items {#2314 ▶}
38 => App\Items {#2313 ▶}
39 => App\Items {#2312 ▶}
40 => App\Items {#2311 ▶}
41 => App\Items {#2310 ▶}
42 => App\Items {#2309 ▶}
43 => App\Items {#2308 ▶}
44 => App\Items {#2307 ▶}
45 => App\Items {#2306 ▶}
46 => App\Items {#2305 ▶}
47 => App\Items {#2304 ▶}
]
}

如何将所有项目的 id 传递给我的 vue 组件,以便它们可以使用 vue 动态呈现?

谢谢。

【问题讨论】:

    标签: php laravel vue.js laravel-blade


    【解决方案1】:

    我认为这是一个数组。所以你必须使用foreach$item[index]-&gt;id

    【讨论】:

    • 我需要在刀片文件中遍历它们,然后将其传递给我的 vue 组件:route ?
    • 你能分享一个完整的转储图像吗?这将有助于提供解决方案。我认为是的,您需要使用循环。
    • 你使用循环吗?尝试 @foreach($item as $singleItem) 然后在这个循环中使用 $singleItem->id
    • 我想保留 Vue 中的所有循环逻辑,而不是刀片。
    • 那么你必须通过vue资源在组件文件中获取这些数据,或者你可以使用axios。
    【解决方案2】:

    在你的刀片文件中试试这个:

    @foreach ($item as $items)
        <ItemComponent
            v-bind:item="{{ json_encode($item) }}"
        />
    @endforeach
    

    这会将完整的 item 对象传递给每个 ItemComponent,如果您只想传递 id,则可以改用 :itemId="{{ json_encode($item-&gt;id) }}"

    如果您想在 Vue 中保留循环逻辑,请参考我之前使用 http 请求而不是内联模板的答案:

    相反,您的 laravel 后端端点应该在从您的 Vue 包装器组件调用后使用响应正文中的 ID 数组进行响应。然后你可以在 Vue 中使用 v-for 指令遍历数组中的每个 ID。

    <template>
        <div>
            <div class="item" v-for="item in items" :key="item.id">
                <ItemComponent :item="item"/>
            </div>
        </div>
    </template>
    
    <script>
    export default {
        data() {
            return {
                items: []
            }
        },
        created: function() {
            // When component instance has loaded (page load)
            // Call your laravel endpoint
            this.$http.get("/laravel/endpoint").then((res) => {
                this.items = res.body.items
            }).catch((error) => {
                console.log(error);
            });
        }
    }
    </script>
    

    现在,如果您想将 一个 ID 作为路由参数传递,那么您可以在组件中使用 $route.params.id 访问它们,其中 'id' 是您设置的参数的名称在你的 Vue 路由器中使用

    {
        path: '/path/to/view/:id'
        ...
    }
    

    【讨论】:

    • 我实际上想传递项目并让它们可以通过它们的 id 访问,但我希望每个项目都是一个对象,因为我需要使用对象表示法访问对象属性。
    • @PA-GW items 数组可以是对象数组。我编辑了我的响应,将每个项目对象传递给一个项目组件,可以使用对象表示法访问项目属性。
    • 所以我不再使用 :route 属性将我的项目传递给 vue 了吗?现在我正在使用 this.$http.get() 检索项目?
    猜你喜欢
    • 2019-10-07
    • 2018-07-15
    • 2021-11-06
    • 2020-06-17
    • 2018-12-22
    • 2018-08-03
    • 2021-04-03
    • 2018-06-20
    • 1970-01-01
    相关资源
    最近更新 更多