【问题标题】:Vue-Multiselect and Laravel 5.3 options show up as JSON elementVue-Multiselect 和 Laravel 5.3 选项显示为 JSON 元素
【发布时间】:2017-06-05 10:01:11
【问题描述】:

我有一个 Laravel 5.3 应用程序并使用 vue-multiselect(版本 2.0.0-beta13)来显示 multiple 选择。选择的选项是通过对给定路由的 AJAX GET 调用获取的(为便于阅读而缩短)。

[
    {
        "address1": "-",
        "address2": "-",
        "city": "-",
        "company": "-",
        "id": 0
    },
    {
        "address1": "Adresse 1 und so",
        "address2": "",
        "city": "Wien",
        "company": "Abernathy company",   
        "id": 27
    }
]

这似乎是有效的 json,当使用 Chrome 的网络选项卡进行检查时,一切似乎都很好。

我的 Vue 组件中有这段代码:

<multiselect
    v-model="companyIDs"
    :allow-empty="true" 
    :value="selected"
    :multiple="true"
    :close-on-select="false"
    :label="company"
    :track-by="id"
    :options="companies"
>
</multiselect>

这是选项 (companies) 如何在选择中显示的屏幕截图:

这里有什么问题?

【问题讨论】:

  • 所以您从 JSON 中获取数据并将它们存储在 companies 中?你把这些数据解析为 JSON - JSON.parse() (我不知道 jQuery 中是否有类似的东西)?
  • 我以 JSON 格式获取数据,无需解析。 typeof companies 返回 object

标签: laravel vue.js vue-component


【解决方案1】:

您只需要从您的代码中删除两个:,以下应该可以工作:

<multiselect
    v-model="companyIDs"
    :allow-empty="true" 
    :value="selected"
    :multiple="true"
    :close-on-select="false"
    label="company"
    track-by="id"
    :options="companies"
>

当您在属性前添加: 时:即shortcut 用于v-bind 并且vue 开始期望它作为vue data 变量而不是简单的字符串。看起来您希望它是纯字符串而不是 vue 变量。所以这就是错误的根本原因。

【讨论】:

  • 谢谢你 - 那是它,我为没有正确阅读文档而感到羞耻:-)
【解决方案2】:

我假设options 是作为 API 响应接收的整个对象数组。如果您只想显示公司名称,则必须在将它们用作值之前选择它们。但这很麻烦,而且可能感觉像是 hack,幸运的是,Vue-Multiselect 作者已经想到了这一点,因此他们添加了使用对象数组的功能 (documentation)。这两个选项是labeltrack-by。您所做的是使用:track-by:label,这不是同一件事,因此图书馆无法识别。

再一次,因为您还没有解释到底要显示什么,我假设您只想为列表中的每个对象显示object[i].company。在这种情况下,您可以将label="company"track-by="id" 添加到组件标记中。

如果您对要显示为 UI 选项的内容有更复杂的逻辑,则必须将作为 API 响应接收的对象数组映射到要向用户显示的字符串数组。

【讨论】:

  • 你有:track-by。如果您仔细查看文档,它会在没有前导 : 的情况下使用。
  • 是的,解决了它。正确阅读文档总是有帮助的 ;-)
猜你喜欢
  • 2017-06-12
  • 2023-03-21
  • 2017-02-22
  • 1970-01-01
  • 2017-02-16
  • 2017-02-09
  • 1970-01-01
  • 2017-03-07
  • 2017-11-07
相关资源
最近更新 更多