vue 双语言切换中,data内翻译文字不正常切换的解决方案
背景
有这么一个登录页面,相关功能如下:
- 支持双语言,点击切换语言
- 表单内部有一个自定义的select,里面option的label、value都是的名字由外部提供;其中预设的option的label使用this.$t(...)提供
问题
在点击切换语言的时候,页面上翻译的文件都能够正常转换、唯独预设option的label不能,如下图,在切换到英文的时候,页面中其余部分都能够转换成英文,除了选择框里面的“xx中心”

原因
data里面的数据($t('m.txt_001'))会在created的时候根据当前语言转换成对应语言的文字(数据中心);
点击语言切换,其它地方会正常执行翻译,而data里面的数据已经是中文了,不会再改变成英文,
=> 除非刷新页面、或者重新为data赋值
方案
点击切换语言的时候,同时刷新页面,让整个页面重新加载
重新为data赋值
一.
使用this.$router.go(0),或者window.reload();
但是使用该方法有一个明显的问题,那就是在手机上面会让页面产生明显的闪烁,用户体验很不好
二.
在网上看到一个销毁,重建组件的方法,有人说可以,但是在我这会产生问题。方案如下:
通过v-if来控制组件是否创建。
<mt-popup v-model="selectboxShow" position="bottom" v-if="hackReset">
<mt-picker :slots="options" :showToolbar="showToolbar" valueKey="label" ref="picker" v-if="hackReset">
<mt-button @click="cancel">{{$t('m.btn_0004')}}</mt-button>
<mt-button @click="check" class="fr">{{$t('m.btn_0005')}}</mt-button>
</mt-picker>
</mt-popup>
data() {
return {
hackReset: true, // 是否重建组件
}
}
methods: {
changeLangen() {
this.changeLang("EN");
localStorage.setItem('language','EN')
this.isCn = false;
this.isEn = true;
this.hackReset = false // 销毁组件
this.$nextTick(() => {
this.hackReset = true
})
}
}
上面这种做法,对于要翻译data里面数据的情况,貌似并不能起到作用,正如前面所说,在登录页面组件created的时候,data里面的数据已经固定了
那么使用v-if销毁整个登录页面组件呢?
<template>
<div class="login" v-if="hackReset">
<div class="head">
<span class="title">{{$t('m.tit_0001')}}</span>
<img src="../../../assets/images/logo.png" />
</div>
<mt-popup>
...
</mt-potup>
</div>
</template>
这样做,我遇到的问题是:
点击切换后,hackReset设置为false,当然,当前登录组件也就被销毁。后面的切换函数里面的代码根本没有this 好嘛。白瞎忙活

这样,我就只能用重新赋值这条路了吧?
三.
因为我需要设置预设值,所以新建一个js文件,在点击时使用bus提交一个事件;在新建的js文件里监听这个事件,把data暴露出来
登录组件引入这个js文件,把js文件内的值重新赋值给data
import { config } from '../../../assets/js/url_config.js'
methods:{
changeLangen() {
this.changeLang("EN");
localStorage.setItem('language','EN')
this.isCn = false;
this.isEn = true;
bus.$emit('getUrlConfig',this)
this.options[0] = config
}
}
js文件
import bus from './bus.js'
let config = null
bus.$on('getUrlConfig',function(vth){
config = { // 一个对象就是一个slot
values: [{
label: vth.$t('m.txt_p_0010'),
value: '1'
},
{
label: vth.$t('m.txt_p_0011'),
value: '2'
},
{
label: vth.$t('m.txt_p_0009'),
value: '3'
}
]
}
})
export {config}
试了下,初步实现了功能,貌似还有些问题诶。
新手就只有这样了吧
vue 双语言切换中,data内翻译文字不正常切换的解决方案的更多相关文章
- 使用vue国际化中出现内置的组件无法切换语言的问题(element-ui、ivew)
在main.js中引入对应组件的语言包 eg: import VueI18n from 'vue-i18n'; // 引入国际化 import elementEn from 'element-ui/l ...
- 【原创】DESTOON做中英双语言(多语言)切换版本具体详解
第一次发原创好激动,该注意点什么? 在开发过程中用户有许多要求,比如这个多语言切换就是一个需求. 首先讲解一下DESTOON(DT)后台系统如何做这个中英.甚至多语言切换的这个功能. DT本身不自带多 ...
- Android程序中,内嵌ELF可执行文件-- Android开发C语言混合编程总结
前言 都知道的,Android基于Linux系统,然后覆盖了一层由Java虚拟机为核心的壳系统.跟一般常见的Linux+Java系统不同的,是其中有对硬件驱动进行支持,以避开GPL开源协议限制的HAL ...
- vue组件中data为什么必须是个函数
<body> <div id="app"> <counter></counter> </div> <templat ...
- 〖Android〗Android App项目资源字符串检查(检查是否缺少对应的翻译,导致系统切换语言后崩溃)
Android项目开发过程中,容易出现缺少对应中英文翻译的情况,这个Python脚本是用于检查字符串是否缺少了对应的翻译 #!/usr/bin/env python # encoding: utf-8 ...
- 通过调用C语言的库函数与在C代码中使用内联汇编两种方式来使用同一个系统调用来分析系统调用的工作机制
通过调用C语言的库函数与在C代码中使用内联汇编两种方式来使用同一个系统调用来分析系统调用的工作机制 前言说明 本篇为网易云课堂Linux内核分析课程的第四周作业,我将通过调用C语言的库函数与在C代码中 ...
- vue.js 中 data, prop, computed, method,watch 介绍
vue.js 中 data, prop, computed, method,watch 介绍 data, prop, computed, method 的区别 类型 加载顺序 加载时间 写法 作用 备 ...
- 十、Vue:Vuex实现data(){}内数据多个组件间共享
一.概述 官方文档:https://vuex.vuejs.org/zh/installation.html 1.1vuex有什么用 Vuex:实现data(){}内数据多个组件间共享一种解决方案(类似 ...
- dart系列之:dart语言中的内置类型
目录 简介 Null 数字 字符串 布尔值 列表 set和map 简介 和所有的编程语言一样,dart有他内置的语言类型,这些内置类型都继承自Object,当然这些内置类型是dart语言的基础,只有掌 ...
随机推荐
- Anaconda 笔记
Anaconda笔记 conda 功能 管理版本的切换 安装其他的包 conda 创建python27环境 conda create --name python27 python=2.7 conda ...
- Docker从入门到实践(1)
一.Docker简介 1.1.什么是 Docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,它是基于 dotCloud 公司多 ...
- ansible start canal
- name: Start canal server shell: source /etc/profile && nohup /opt/canal/bin/startup.sh
- elementui分页记录,reserve-selection
第一步:在<el-table></el-table>标签中加上 :row-key="getRowKeys" 第二步:在<el-table-column ...
- php使用QueryList轻松采集JavaScript动态渲染页面
QueryList使用jQuery的方式来做采集,拥有丰富的插件. 下面来演示QueryList使用PhantomJS插件抓取JS动态创建的页面内容. 安装 使用Composer安装: 安装Query ...
- 一文带你深入了解 redis 复制技术及主从架构
主从架构可以说是互联网必备的架构了,第一是为了保证服务的高可用,第二是为了实现读写分离,你可能熟悉我们常用的 MySQL 数据库的主从架构,对于我们 redis 来说也不意外,redis 数据库也有各 ...
- 在ensp上模拟企业网络场景并Access接口加入相应VLAN
模拟的企业网络大概描述: 公司内网是一个大的局域网,二层交换机S1放置在一楼,在一楼办公的部门有IT部和人事部:二层交换机S2放置在二楼,在二楼办公的部门有市场部和研发部.由于交换机组成的是广播网,交 ...
- 【集训Day3 单调队列】【2018寒假集训Day 5更新】最大子序列和
最大子序列和(maxsum) [问题描述] 输入一个长度为n的整数序列(A1,A2,……,An),从中找出一段连续的长度不超过M的子序列,使得这个序列的和最大. 例如: 序列 1, -3, 5, 1, ...
- MySql 表索引设计原则
索引的优点 1.加快数据的检索速度,这是创建索引的最主要的原因; 2.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性; 3.加速表和表之间的连接; 4.在使用分组和排序子句进行数据检索时,可 ...
- nginx的使用,以及反向代理,负载均衡,从安装到使用,全部步骤。
先总结nginx实现负载均衡的原理,在这之前先的知道反向代理,因为nginx的负载均衡是在反向代理的基础上实现的: 1.反向代理:通过在nginx的配置文件 (vim /opt/nginx196/co ...