#javascript #vue.js
#javascript #vue.js
Вопрос:
Я пытаюсь создать реактивный Vue
из другого объекта. Пожалуйста, смотрите приведенный ниже код.
test = {
test: null
}
test.set = function () {
this.test = 'data'
}
test_vue = new Vue({ data: test.test })
console.log(test_vue.data) // null
test.set()
console.log(test_vue.data) // still null... I would expect 'data' here...
Что я делаю не так?
Ответ №1:
Вы можете использовать Vue 2 observable
или Vue 3 reactive
для создания реактивного объекта. Например, следующее создает хранилище данных с реактивным state
объектом:
import { observable } from 'vue'
const test_vue = {
state: observable({
test: null
}),
setTest() {
this.state.test = 'data'
}
}
test_vue.setTest() // => state.test === 'data'
Ответ №2:
Попробуйте присвоить test
значение как свойство и set
функционировать как метод vue
test = {
test: null
}
test.set = function() {
this.test = 'data'
}
test_vue = new Vue({
data() {
return {
test: test.test
}
},
methods: {
set: test.set
}
})
console.log(test_vue.test)
test_vue.set()
console.log(test_vue.test)
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
Комментарии:
1. Для этого мне потребуется установить значения через реактивную зависимость… не очень хороший выбор дизайна, хотя он работает.
2. чего вы хотите достичь?
3. Реактивный поток из восходящих потоков в нисходящие потоки: вычисление при test и test_vue создаст основной набор данных. Представьте, что существует несколько вышестоящих «тестовых» объектов.
4. Я не понимаю вашего варианта использования, но независимо от того, что вы хотите сделать, вы могли бы добиться этого внутри экземпляра Vue или любого дочернего компонента