У меня есть вычисленное свойство countryName
которое возвращает название страны на основе кода страны и отлично работает. Мне нужно использовать значение countryName
как значение label
свойства данных country
но я получаю undefined
.
export default {
props: ['content'],
data () {
return {
countries: require('../../plugins/countries'),
country: {
value: this.content.country_code,
label: this.countryName
}
}
},
computed: {
countryName () {
return this.countries.find(item => item.value === this.content.country_code).label
}
}
}
Когда компонент создается, функция данных вызывается до того, как вычисляемые свойства будут добавлены в компонент. Вот почему вы получаете undefined
. Попробуйте установить его в mounted
или created
.
data () {
return {
countries: require('../../plugins/countries'),
country: {
value: this.content.country_code,
label: null
}
}
},
computed: {
countryName () {
return this.countries.find(item => item.value === this.content.country_code).label
}
},
mounted(){
this.country.label = this.countryName
}
Для любопытных это функция initState
с Vue 2.3.3
function initState (vm) {
vm._watchers = [];
var opts = vm.$options;
if (opts.props) { initProps(vm, opts.props); }
if (opts.methods) { initMethods(vm, opts.methods); }
if (opts.data) {
initData(vm);
} else {
observe(vm._data = {}, true /* asRootData */);
}
if (opts.computed) { initComputed(vm, opts.computed); }
if (opts.watch) { initWatch(vm, opts.watch); }
}
created()
неmounted()
и сумел отказаться от вычисленного свойстваcreated () {this.country.label = this.countries.find(item => item.value === this.content.country).label}