Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

412
Visualizações
Vue.js: ¿cómo acceder al valor inyectado en el método calculado?

Usé el mecanismo de proporcionar/inyectar para pasar datos de padres a nietos, pero en uno de mis componentes necesito manejar los datos antes de enviarlos a la plantilla.

Así que tengo:

 export default defineComponent({ name: 'MrComponent', inject: ["mydata"], computed: { processedData() { const mydata = this.mydata; return mydata + 1; // Some handling of the data here } } })

Pero me sale el siguiente error:

 [vue-cli-service] TS2339: Property 'mydata' does not exist on type 'CreateComponentPublicInstance<{ [x: string & `on${string}`]: ((...args: any[]) => any) | undefined; } | { [x: string & `on${string}`]: ((...args: never) => any) | undefined; }, { chartOptions: { responsive: boolean; maintainAspectRatio: boolean; cutout: string; borderWidth: number; }; }, ... 15 more ..., {}>'. [vue-cli-service] Property 'mydata' does not exist on type '{ $: ComponentInternalInstance; $data: {}; $props: { [x: string & `on${string}`]: ((...args: any[]) => any) | undefined; } | { [x: string & `on${string}`]: ((...args: never) => any) | undefined; }; ... 10 more ...; $watch(source: string | Function, cb: Function, options?: WatchOptions<...> | undefined): WatchStopHan...'. [vue-cli-service] 41 | computed: { [vue-cli-service] 42 | chartData() { [vue-cli-service] > 43 | const mydata = this.mydata; [vue-cli-service] | ^^^^^^^^ [vue-cli-service] 44 | } [vue-cli-service] 45 | } [vue-cli-service] 46 | })

Si accedo a mydata en la plantilla, funciona:

 <template> {{ mydata }} </template>

Pero necesito hacer algunas otras operaciones con mis datos antes de mostrarlos. ¿Cuál es la forma correcta de hacerlo?

Gracias.

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Esto me parece un error de Vue, ya que el accesorio debería detectarse automáticamente desde la opción de inject (archivado vuejs/core#5931 ), pero hay un par de soluciones...

Opción 1: Tipo de accesorio falso en defineComponent

Si su componente no tiene props , podría "falsificar" un accesorio mydata especificándolo en el primer argumento de tipo de defineComponent() :

 export default defineComponent<{ mydata: number }>({ inject: ['mydata'], computed: { processedData() { // `this.mydata` is number } } })

Sin embargo, esta solución es frágil ya que rompe los tipos tan pronto como agrega la opción de props .

Opción 2: usar la API de composición

Cambie las partes relevantes del código a la API de composición (es decir, inject() y computed() ):

 import { defineComponent, inject, computed } from 'vue' export default defineComponent({ setup() { const mydata = inject('mydata') as number const processedData = computed(() => { return mydata + 1 }) return { processedData } } })
about 4 years ago · Juan Pablo Isaza Relatório

0

¿Está buscando Tipos de utilidad - ComponentCustomProperties ?

 declare module 'vue' { interface ComponentCustomProperties { fastdata: { user: { nome: string, tel: string, pts: number, nivel: number, proximo_nivel: number, tot_kg: number, coleta: Array<any>, }, noticias: Array<any>, }, } }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda