首页 > 其他分享 >vue i18n _ctx.$t is not a function

vue i18n _ctx.$t is not a function

时间:2022-12-07 15:00:21浏览次数:53  
标签:function core vue bundler js i18n esm defineComponent

 

一、问题

Uncaught (in promise) TypeError: _ctx.$t is not a function
at Select.vue:51:95
at renderFnWithContext (runtime-core.esm-bundler.js:852:21)
at renderSlot (runtime-core.esm-bundler.js:6627:55)
at index.vue:18:20
at renderFnWithContext (runtime-core.esm-bundler.js:852:21)
at renderSlot (runtime-core.esm-bundler.js:6627:55)
at Proxy._sfc_render80 (table.vue:31:9)
at renderComponentRoot (runtime-core.esm-bundler.js:895:44)
at ReactiveEffect.componentUpdateFn [as fn] (runtime-core.esm-bundler.js:5127:34)
at ReactiveEffect.run (reactivity.esm-bundler.js:185:25)

 

想对应的版本

    "dependencies": {
        "@vueuse/core": "^4.10.0",
        "axios": "^0.21.1",
        "element-plus": "^2.2.10",
        "js-cookie": "^2.2.1",
        "lodash": "^4.17.20",
        "normalize.css": "^8.0.1",
        "nprogress": "^0.2.0",
        "throttle-debounce": "^3.0.1",
        "vue": "^3.2.8",
        "vue-i18n": "^9.1.6",
        "vue-router": "4",
        "vuex": "^4.0.0"
    },
    "devDependencies": {
        "@vitejs/plugin-vue": "^1.6.0",
        "@vue/compiler-sfc": "^3.2.6",
        "sass": "^1.32.12",
        "vite": "^2.9.15"
    },
    "resolutions": {
        "esbuild": "0.14.34"
    }

 

也就是  vue-i18n 版本是9.1.6

我出现错误的场景

list.vue 嵌套 add.vue,add.vue 嵌套queryselect.vue。

列表页面dialog弹出add.vue 子页面,add.vue有部分需要到queryselect.vue进行勾选。 然后再queryselect.vue勾选完成之后 或者是关闭select.vue的时候报错。然后这个报错又不影响功能的执行

 

 

二、解决办法

在 createI18n 方法的时候加上

   globalInjection:true,   //进行全局依赖
   legacy:false,        //过去式,为了兼容老版本,不写默认是true

如下图所示

 

 

而子页面往父页面传值的方法

vue2的方法,在methods里面,这这里面的refreshSelectClose是父页面的事件,一下是queryselect.vue代码

<template>
          <el-button type="primary" @click="submit">提交</el-button>
</template>


<script>
import { defineComponent, ref, watch } from 'vue'

 
export default defineComponent({
 methods: {
    submit () {
    
      const chooseData = ref([])
this.$emit('refreshSelectClose',chooseData )  //关闭后反馈的事件,
        }
    },   
}) </script>


 

add.vue页面,嵌套queryselect.vue子页面, refreshSelectClose是定义的时间,而selectClose是真实执行的方法

<template>
 <QuerySelect  v-if="layer.show" @refreshSelectClose="selectClose" /> 

</template>


<script>
import {
  defineComponent,
  ref,
  reactive,
} from 'vue'
import QuerySelect from './querySelect.vue' 

export default defineComponent({
  components: {
     QuerySelect,
  },
    methods: {
      selectClose (data) {
         console.log("test",data)
      }
    }
})

 

 

而vue3的setup里面不能用this,需要在setup定义参数

queryselect.vue

<template>
          <el-button type="primary" @click="submit">提交</el-button>
</template>
<script>
import { defineComponent, ref, watch } from 'vue'

export default defineComponent({
  name: 'uaisKeyQuery',   props: {     selectlayer: {       type: Object,       default: () => {         return {           show: false,           title: '',           showButton: true,           operationType: 'view',           zindex:1001,         }       }     }   },
 setup(props,context) {
    const chooseData = ref([])
    const submit = () => {  
        context.emit('refreshSelectClose',chooseData )  //关闭后反馈的事件,
        }
    }
   return {
      chooseData,
      submit, 
  }
})
</script>

setup参数里面context就是vue2里面的this,而在setup里面就没有this这个概念了,而这里的参数props就是defineComponent 里面的props这个key,比如页面需要初始化默认值的话就在props这里面加。

以下是add.vue

<template>
 <QuerySelect  v-if="layer.show" @refreshSelectClose="selectClose" /> 

</template>


<script>
import {
  defineComponent,
  ref,
  reactive,
} from 'vue'
import QuerySelect from './querySelect.vue' 

export default defineComponent({
  components: {
     QuerySelect,
  },
  setup(props,context) {
     const selectClose= (data)=> {
         console.log("test",data)
      }
      return {
         return selectClose,
      }
    }
})

 

标签:function,core,vue,bundler,js,i18n,esm,defineComponent
From: https://www.cnblogs.com/zhian/p/16962603.html

相关文章

  • <三>function函数对象类型的应用示例
    std::function是一组函数对象包装类的模板,实现了一个泛型的回调机制。function与函数指针比较相似,优点在于它允许用户在目标的实现上拥有更大的弹性,即目标既可以是普通函数......
  • 手写vue-router核心原理
    最近也在观察vue3新特性,抽空玩一玩嵌套路由的vue-router,直接上代码项目目录结构代码展示app.vue<template><divid="app"><div><router-linkto="/"......
  • 创建Vue项目
    前期准备:安装node.js(node-v检查是否安装)安装vue-cli脚手架(使用淘宝镜像,然后运行npminstall-gvue-cli安装脚手架,vue-V检查是否安装)一、基本创建项目操作1、初始......
  • 使用vue深度选择器修改ElementUI组件内样式
    例子:el-collapse标签修改子组件样式在带有scoped属性的style中书写样式时,无法作用影响到子组件中的样式,此时我们会使用到deep深度选择器,来解决此问题,我们在使用less预处理......
  • vscode中引用vue3时红色提示
    从GitHub上下载了一个前端项目学习,用vscode打开。“vue3+vite”在vscode控制台执行npminstall,安装所需要的各种包。这个时候可以用npmrundev,启动项目。但是vs......
  • Vue中的diff算法深度解析
    模板tamplate经过parse,optimize,generate等一些列操作之后,把AST转为renderfunctioncode进而生成虚拟VNode,模板编译阶段基本已经完成了,那么这一章,我们来探讨一下Vue中的一......
  • Vue3必会技巧-自定义Hooks
    Vue3自定义Hooks定义:个人理解:一些可复用的方法像钩子一样挂着,可以随时被引入和调用以实现高内聚低耦合的目标,应该都能算是hook;为什么Vue3要用自定义Hook?:结论:就是为了......
  • Vue3知识点之数据侦测
    Vue的核心之一就是响应式系统,通过侦测数据的变化,来驱动更新视图。实现可响应对象的方式通过可响应对象,实现对数据的侦测,从而告知外界数据变化。实现可响应对象的方式:g......
  • vue源码中的nextTick是怎样实现的
    一、Vue.nextTick内部逻辑在执行initGlobalAPI(Vue)初始化Vue全局API中,这么定义Vue.nextTick。functioninitGlobalAPI(Vue){//...Vue.nextTick=ne......
  • Vue源码解读之InitState
    前面我们讲到了_init函数的执行流程,简单回顾下:初始化生命周期-initLifecycle初始化事件-initEvents初始化渲染函数-initRender调用钩子函数-beforeCreate初始化依赖......