В настоящее время я перехожу на Vue 3, раньше я мог получить доступ к свойствам в старом приложении vue 2 следующим образом:
import { createApp } from 'vue/dist/vue.esm-bundler';
...
const app = createApp({
// el: 'app', // removed
data() {
const results = ...;
return {
results,
...
};
},
...
});
// added for vue 3
app.mount('app')
const { results } = app
console.info(results) // is undefined
... но теперь я не могу, и при проверке объекта приложения я не могу найти свойства данных. Кроме того, мне любопытно, изменилось ли это и передовой опыт.
Приложение отображается на странице, но мне также нужно получить доступ к свойствам приложения для получения дополнительных сведений, но я не могу этого сделать.





Затем вы можете получить доступ к своим данным в Vue 3 через объект vm, как в Vue 2.
Но теперь вам нужно получить объект vm из функции mount(), а не из createApp()
v2
var vm = new Vue({...})
vm.myData =
v3
var app = Vue.createApp({})
app.myData = // this does not work
var vm = app.mount('#app')
vm.myData = // this works
Будьте осторожны с уничтожением ваших данных, они могут потерять реактивность. Используйте toRef и toRefs, чтобы сохранить реактивность.
const { createApp, ref, toRef } = Vue;
const App = {
data() {
return {
title: 'My App'
}
}
}
const app = createApp(App)
console.info(`app.title: ${app.title}`) // --> undefined
const vm = app.mount('#app')
console.info(`vm.title: ${vm.title}`) // --> My App
// Be careful with destructing your data, it could lose the reactivity.
console.info('-- Reactivity is lost ---')
var { title } = vm;
console.info(`title: ${title}`)
title = 'My new Title'
console.info("title = 'My new Title'")
console.info(`title: ${title}`) // --> 'My new Title'
console.info(`vm.title: ${vm.title}`) // --> My App
// Be careful with destructing your data, it could lose the reactivity.
console.info('--- Reactivity works ---')
const title2 = toRef(vm, 'title');
console.info(`title2.value: ${title2.value}`) // --> My App
title2.value = 'My new Title 2'
console.info("title2.value = 'My new Title 2'")
console.info(`title2.value: ${title2.value}`) // --> My new Title 2
console.info(`vm.title: ${vm.title}`) // --> 'My new Title 2'#app { line-height: 2; }
[v-cloak] { display: none; }<div id = "app" v-cloak>
{{title}}
</div>
<!-- include VueJS first -->
<script src = "https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>