Итак, это мой тестовый код:
Vue.component('area-selectors-box', {
template: `
<div class = "selectors-box">
<area-selector v-for = "select in selects"></area-selector>
</div>
`,
props:['selects']
});
Vue.component('area-selector', {
template: `
<select>
<option disabled selected value = "">Seleziona continente</option>
<option :areas = "select.areas" v-for = "area in areas">{{ area.name }}</option>
</select>
`,
props:['select']
});
var dealer_manager = new Vue({
el: '#dealers-main-box'
,data:{
dealers:[],
selects:[]
}
,mounted: function(){
}
,created: function(){
this.get_dealers_data('00');
}
,methods: {
get_dealers_data: function(area_id){
var app = this;
$.ajax({
type: 'GET'
,dataType: 'json'
,url: dealers_settings.api_url + area_id
})
.done(function(json_data, status, xhr){
if (!json_data) return;
var parsed = JSON.parse(json_data);
if (parsed.type == 'areas'){
app.selects.push({
areas: parsed.items
});
} else if (parsed.type == 'dealers'){
app.dealers = parsed.items;
}
}.bind(this))
.fail(function( jqXHR, textStatus, errorThrown ){
}.bind(this))
}// get dealers data
}
});
Это данные json, которые я получаю и передаю в поле селекторов областей:
Отлично. Но данные в селекторе области пусты. Как я могу сообщить об областях во время инициализации? Как видите, area — это массив объектов.
Как ни странно (для меня), если я сделаю все в одном компоненте, он будет работать правильно:
Vue.component('area-selectors-box', {
template: `
<div class = "selectors-box">
<select :selects = "selects" v-for = "select in selects">
<option disabled selected value = "">Seleziona continente</option>
<option v-for = "area in select.areas">{{area.name}}</option>
</select>
</div>
`,
props:['selects']
});
Итак, я думаю, что мне следует научиться передавать подданные в подкомпоненты... Любая помощь? :)
Решено: мне нужно пройти что угодно..
Vue.component('area-selectors-box', {
template: `
<div class = "selectors-box">
<area-selector v-for = "select in selects" :select = "select"></area-selector>
</div>
`,
props:['selects']
});
Vue.component('area-selector', {
template: `
<select :select = "select">
<option disabled selected value = "">Seleziona continente</option>
<area-option v-for = "area in select.areas" :area = "area" :key = "area.term_id"></area-option>
</select>
`,
props:['select']
});
Vue.component('area-option', {
template: `<option :area = "area">{{area.name}}<slot></slot></option>`
,props: ['area']
});