You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel视图数组加载至Vue组件异常:下拉选择框值为空问题排查

解决Laravel视图数组传递到Vue组件的问题

你的问题主要出在数据传递的转义处理和Vue组件内数据初始化的时机两个关键点上,我来一步步帮你排查修复:

1. 修复Laravel视图中Vue组件的props传递问题

你原来的写法存在转义和语法问题:

<create-task-jobs v-bind:customers={{ json_encode($customers) }}>
</create-task-jobs>
  • Blade的{{ }}会自动转义HTML特殊字符(比如双引号会变成&quot;),导致Vue接收到的是转义后的字符串而非数组对象;
  • 未用引号包裹传递的值,容易引发语法错误。

正确写法:
用{!! !!}输出未转义的JSON,用单引号包裹值,同时把Eloquent集合转成纯数组(避免携带模型的额外属性):

<create-task-jobs :customers='{!! $customers->toArray() !!}'>
</create-task-jobs>

注::customers是v-bind:customers的简写,更符合Vue开发习惯;toArray()确保Vue能正确解析每个客户的id和customer_name字段。

2. 修复Vue组件内customers_load的初始化时机问题

你原来在data()里直接展开this.customers:

data() {
    return {
        form: {
            customer: null,
        },
        customers_load: [{ text: 'Select One', value: null },...this.customers]
    }
}

data()函数在组件实例创建时执行,此时props中的customers可能还未被父组件传递完成,导致...this.customers展开null或undefined,最终下拉框只有默认选项。

正确做法:使用计算属性
计算属性会自动监听customers props的变化,实时更新选项列表:

<template>
    <div>
        <form @submit.prevent="agregar">
            <h3>Afegir Tasques</h3>
            <b-form-group id="input-group-3" label="Client" label-for="input-3">
                <b-form-select id="input-3" v-model="form.customer" :options="customers_load" required >
                </b-form-select>
            </b-form-group>
            <button class="btn btn-primary" type="submit">Agregar</button>
        </form>
    </div>
</template>
<script>
export default {
    props: {
        customers: {
            type: Array,
            // 设置默认空数组,避免null引发错误
            default: () => []
        }
    },
    data() {
        return {
            form: {
                customer: null,
            }
        }
    },
    computed: {
        customers_load() {
            // 先判断customers是否存在,再合并默认选项
            return [{ text: 'Select One', value: null }, ...this.customers]
        }
    }
}
</script>

3. 额外检查:确保Eloquent模型字段正确暴露

如果你的Customer模型设置了$hidden属性隐藏字段,要确保id和customer_name能被toArray()输出。也可以在控制器查询时直接指定字段,减少冗余数据:

// 控制器中查询指定字段
$customers = Customer::select('id', 'customer_name')->get();

做完这些修改后,Vue组件应该就能正确接收客户数组,下拉框也能正常显示选项了。

内容的提问来源于stack exchange,提问作者ruzD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 04:57:49