Как получить доступ к свойствам данных приложения в Vue 3

В настоящее время я перехожу на 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

... но теперь я не могу, и при проверке объекта приложения я не могу найти свойства данных. Кроме того, мне любопытно, изменилось ли это и передовой опыт.

Приложение отображается на странице, но мне также нужно получить доступ к свойствам приложения для получения дополнительных сведений, но я не могу этого сделать.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
117
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Затем вы можете получить доступ к своим данным в 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>

Другие вопросы по теме