如何使用VueJS在动态加载的辅助选择上设置所选选项?

时间:2016-06-01 20:12:33

标签: ajax blade vue.js vue-resource

我有一个城市选择:

<select v-model="city">
    <option value="" selected>CIDADE AONDE VOCÊ ESTUDA</option>
    <option value="city1">City 1</option>
    <option value="city2">City 2</option>
    <option value="cityx">City x</option>
</select>

一所学校选择:

<select v-model="school">
    <option
        v-for="item in schools"
        v-bind:value="item.name"
        v-bind:selected="school == item.name"
    >
        @{{ item.name }}
    </option>
</select>

这是数据(由Laravel Blade视图填充),可能是也可能不是城市和学校:

data: {
    ...
    city: '{{ Input::old('city') }}',
    school: '{{ Input::old('school') }}',
    schools: [],
},

我也有关于城市的观察:

watch: {
    'city': '__cityChanged',
},

这是事件处理程序:

__cityChanged: function (event)
{
    this.school = '';

    this.__fetchSchools();
},

和抓手:

__fetchSchools: function (event)
{
    if (this.city)
    {
        this.$http.get('/schools/' + this.city, function (schools)
        {
            this.schools = schools;
        });
    }
},

几乎所有方法都运行良好,唯一的问题是,当表单重新加载(或重新发送回验证失败)并且城市和学校已被选中时,它会调用__fetchSchools并填写学校选择正确,但它没有设置学校选择选项,因此用户看到的是未选择的学校。

有没有办法让它使用Vue?

1 个答案:

答案 0 :(得分:0)

问题出现在__cityChanged处理程序中,这是修复:

__cityChanged: function (event)
{
    var city = '{{ Input::old('city') ?: (isset($subscription) ? $subscription->city : '') }}';

    if (this.city !== city)
    {
        this.school = '';
    }

    this.__fetchSchools();
},