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

345
Visualizações
¿Por qué no puedo usar .includes en una cadena en v-if cuando uso una propiedad calculada?

Tema

Estoy tratando de determinar si una cadena incluye o no alguna subcadena en la directiva Vues v-if. Cuando lo hago, me sale el siguiente error:

 TypeError: $options.language.includes is not a function

Estoy usando Vue, Vuex y Ionic.

Donde el lenguaje es una propiedad calculada:

 computed: { language() { return this.$store.getters.getLanguage; } }

Y el v-si se ve así:

 <ion-label v-if="language.includes('en')">Play as guest</ion-label>

Así es como se ve la propiedad calculada en la tienda:

 state: { language: String, }

Mutaciones:

 mutations: { setLanguage(state, payload) { state.language = payload; } }

Comportamiento:

 actions: { setLanguage(state, language) { state.commit('setLanguage', language); } }

Adquiridor:

 getters: { getLanguage: state => state.language, }

Y el idioma se establece en el gancho iónico ionViewWillEnter:

 async ionViewWillEnter() { const info = await Device.getLanguageCode(); this.$store.dispatch('setLanguage', info.value); }

Que se dispara cuando el enrutamiento del componente está a punto de animarse a la vista

Intentos de solución

  1. Me aseguré de que la propiedad calculada sea de tipo cadena usando typeof
 <ion-label v-if="typeof language === 'string'">Play as guest</ion-label>

Que muestra la etiqueta que significa que la propiedad calculada es una cadena

  1. He intentado usar indexOf
 language.indexOf('en') > -1

Pero esto resulta en:

 TypeError: $options.language.indexOf is not a function

Y ahora no estoy muy seguro de cómo proceder. Necesito poder verificar si la cadena de propiedad calculada incluye o no alguna subcadena en la directiva v-if. ¿Cómo puedo conseguir esto? ¡Gracias por tu ayuda!

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

0

La explicación del error es que el language está definido (de lo contrario, el error se debe a que falta la propiedad includes ) pero no tiene el método de includes . Esto significa que es un objeto o una función.

El hecho de que typeof language === 'string' sea verdadera en algún momento significa que un valor cambia de no cadena a cadena.

El problema es:

 state: { language: String, }

A menos que este código pertenezca a accesorios de componentes que usen una lógica especial para verificar tipos de accesorios y acepte constructores para tipos primitivos, esto significa que state.language se asigna con un constructor de String , es decir, una función.

Debería ser:

 language: null,

o

 language: '',

o

 language: 'en',

Tenga en cuenta que el valor no inicializado puede necesitar un tratamiento especial, es preferible null porque indica que un valor no está inicializado y da como resultado errores claros e inequívocos. En este caso sería:

No se puede leer la propiedad 'incluye' de nulo

Es una mala práctica poner lógica en las plantillas. Esto hace que sea más difícil depurar y manejar valores, y también puede causar problemas de rendimiento para cálculos intensivos. Este es el caso de uso para las propiedades calculadas:

 computed: { language() { return this.$store.getters.getLanguage; }, isDefaultLanguage() { return !this.language || this.language.includes('en'); } }
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