【问题标题】:Display Object list from server in a Select option in Vue在 Vue 的 Select 选项中显示来自服务器的对象列表
【发布时间】:2016-08-08 02:05:21
【问题描述】:

我在 $grades 变量中收到格式正确 ($key => $value) 的成绩列表

如何使用 Vue 使用此变量填充选择选项输入。

我想我必须将 vue 变量与 : 绑定,但我只是从 vue 开始,我可以找到非常少的基本示例,

<select v-model="grades" class="form-control">
       <option v-for="gradeValue in gradeValues" :gradeValues="{{ $grades /* Laravel Variable */ }}">@{{ gradeValue }}</option>
</select>

编辑:我可以从 Vue 进行 ajax 调用,这不应该那么复杂,但是当页面加载时,我的 Laravel 控制器将变量传递给我的视图,所以,这对我来说是一种更简洁的方法,在这种情况下有不需要ajax。

【问题讨论】:

  • 你应该在一个 vue 钩子中设置来自服务器的变量,比如 readycreated
  • 问题是我不能在刀片文件 (.blade.php) 之外使用 laravel 变量。那是我的问题。所以,我的问题是如何在html里面赋值一个变量,然后在vue中获取变量

标签: laravel vue.js


【解决方案1】:

你有两个选择:

您可以使用刀片的foreach 方法创建option 元素:

@foreach ($grades as $grade)
    <option ...>{{ $grade }}</option>
@endforeach

或者您可以使用您的模板为您的grades 创建一个专用组件并传入$grades 变量。例如:

<grades :grades="{{ $grades }}"></grades>

【讨论】:

  • 我测试了第一个解决方案,它适用于前端,但是我可以在js中访问成绩吗?另外,我可以制作一个组件,但如果它只是页面中的一个下拉菜单,是否值得?另外,我应该如何选择默认值??? Tx 为您提供帮助@Alexandros
  • 我建议你创建一个带有grades属性的组件。这样你就可以访问js中的数据了。要设置默认值,您可以有条件地应用 selected 属性。例如&lt;option ... selected="yourExpresssion"&gt;
  • 好的,但是,我的页面中有 3 个组合、2 个输入文本、1 个标签字段。这样做的目的是根据所选选项设置标签字段。所以我应该为这个页面有 3 个组件 + 1 个全局组件?可以吗?或者在这种情况下应该使用什么最好使用vue?
  • 你不需要这么多东西。您可以使用您喜欢的任何方式简单地创建选项,并将select 元素绑定到使用v-model 的变量。例如:&lt;select v-model="selected"&gt;...&lt;/select&gt; 勾选此jsfiddle.net/hootlex/489cezpm
  • 你回答了我的第一个问题,所以我会接受你的回答。现在,我会问另一个问题并链接到这个问题,因为我不清楚我应该如何继续使用 Vue
【解决方案2】:

我认为这对您来说过于复杂,您在这个问题中的代码看起来很接近。你的 Vue 组件和你的刀片在同一个文件中吗?然后就是:

html

<select v-model="selectedGrade" class="form-control">
   <option v-for="(grade, val) in grades" :value="val">@{{ grade }}</option>
</select>

js:

new Vue({
  ...
  data:function(){
    return { 
      grades:{{ $grades }},
      selectedGrade:2 //some default value
    }
  }
  ...
});

如果您的组件位于单独的文件中,您仍然不需要为每个选择下拉菜单使用单独的组件,您只需将所有必需的信息传递到一个组件中。如果没有更好地了解您的应用,我猜它可能是这样的:

<person-data :grades="{{ $grades }}" :categories="{{ $categories }}" :ages="{{ $ages }}"></person-data>

然后是vue组件:

var PersonData = Vue.extend({
  props:['grades','categories','ages']
});

【讨论】:

  • 那么我应该如何使用第二个选项设置默认值?我试图把它放在同一个文件中,但我得到:“require is not defined”
  • 可以添加:Vue.component('person-data', PersonData);对于您的回答,组件需要注册
  • 它正在工作,但我不知道如何访问 js var。当我尝试时:console.log(PersonData);它显示 Vue 组件,当我在 Vue DevTool 中打开它时,我可以看到内容,但是当我尝试访问 (PersonData.grades) 或 PersonData['grades'] 时,我得到未定义
  • 在组件中您只需引用this.grades
  • 我很困惑(并且对 Vue 有点不满)。我做了一个JSBin。 jsbin.com/womevex/edit?html,js,output
猜你喜欢
  • 2022-11-16
  • 2021-02-09
  • 2013-06-09
  • 1970-01-01
  • 2021-02-17
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 2017-08-09
相关资源
最近更新 更多