computed
is not available at the time data
gets initialized.
If it should be a one-time thing (and NOT reactive), you could achieve this by setting the data at the moment where the computed property is available by using the created()
hook:
export default {
data: () => ({
myDataBackend: '',
}),
computed: {
computedData () {
return 'Hello World'
}
},
created() {
this.$set(this, 'myDataBackend', this.computedData)
}
}
Futher reading: Vue Documentation on Lifecycle Hooks
In case you are trying to work with v-model
:
You could also use :value
and some event like @change
or @keyup
in the element instead.
:value
is the value which the input-element initially works with
- After writing some letter in the input field, the
@keyup
event changes the data.
Typically, events carry the updated form value in target.value
- The
changeMyData
method sets the value
- the computed property listens to the data change and the
:value
of the input field gets updated.
Note: I used data
as a data store. But you could also use for example vuex instead.
<template>
<div>
<input
type="text"
:value="computedData"
@keyup="changeMyData"
/>
<p>{{myDataBackend}}</p>
</div>
</template>
<script>
export default {
data: () => ({
myDataBackend: 'Hello World'
}),
methods: {
changeMyData(evt) {
this.$set(this, 'myDataBackend', evt.target.value)
console.log('Changed the value to: ' + evt.target.value)
}
},
computed: {
computedData () {
return this.myDataBackend
}
}
}
</script>