- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 vue-i18n用于本地化。当我想翻译输入占位符时,如:<input type="text" v-model="someValue" :placeholder="$t('translation.string')">
我必须使用 $t()
在每次重新渲染时执行的函数( library docs mention 也是如此)。这在我的简单预订表单中添加了数千个不必要的函数调用,我想避免这种情况。
有没有办法只绑定(bind)一次属性?翻译后的值在 Vue 实例的整个生命周期中不会改变。 v-once
不是我想要的,因为我想保持组件/节点的 react 性,并且只对属性进行“硬编码”。
我知道我可以通过简单地将翻译后的字符串存储在数据对象中来实现我所需要的,但我想知道是否有替代的、更简单的解决方案(不需要大量的代码重复)。
最佳答案
一个 computed
property会做你正在寻找的东西,因为它们只会在它们的依赖关系发生变化时触发重新运行。由于this.$t('LOCALE.STRING')
除非您的语言环境发生更改,否则不会更改,保证您只运行一次,之后该值将由 Vue 缓存以供后续渲染。
<template>
...
<input
...
:placeholder="translatedPlaceholder"
>
...
</template>
<script>
...
computed: {
translatedPlaceholder() {
return $t('translation.string');
},
},
...
</script>
这个解决方案最棒的部分是,如果语言环境确实发生了变化,那么 Vue 确实会刷新计算属性,将其更新为正确的值。
<p>
中的随机数。标签,带有两个按钮。文本中的本地化字符串是从计算属性中提取的。
<p>
在 DOM 中重新渲染。
const messages = {
en: {
"greeting": 'Hello!',
},
es: {
"greeting": '¡Hola!',
},
};
new Vue({
i18n: new VueI18n({
locale: 'en',
messages,
}),
data() {
return {
num: 1,
}
},
computed: {
localizedGreeting() {
console.log('Computed executed');
return this.$t('greeting');
},
},
methods: {
swapLocale() {
this.$i18n.locale = (this.$i18n.locale == 'en' ? 'es' : 'en');
},
randomNum() {
this.num = Math.floor(Math.random() * 10000);
},
},
updated() {
console.log('DOM updated');
},
}).$mount('#app')
.as-console-wrapper {
max-height: 120px !important;
}
<script src="https://unpkg.com/vue@2/dist/vue.min.js"></script>
<script src="https://unpkg.com/vue-i18n@8"></script>
<div id="app">
<p>{{ `${localizedGreeting} #${num}` }}</p>
<button @click="randomNum()">Re-render Greeting</button>
<button @click="swapLocale">Swap Greeting Locale</button>
</div>
$t()
调用,值得记住的是,实际的性能影响可能很小。不要用简单来换取性能提升,除非它真的很有意义。
关于javascript - 如何只用 v-bind 绑定(bind)属性一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49053575/
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 6 年前。 Improve this ques
我是 jQuery 的新手. 是否可以仅使用 jQuery 和 HTML 创建一个网站,例如在线测验? 最佳答案 我想理论上你可以。 要使网站不仅仅是一组静态页面,它必须做一些有用的事情。页面本身只能
所以 'awesome document' LIKE '%doc%' 是真的,因为 doc 是一个子字符串。但是,我希望它是假的,而 'awesome doc' 或 'doc awesome' 或 '
我正在寻找在我的 mysql 数据库中转储所有数据的语法。我不想要任何表格信息。 最佳答案 mysqldump --no-create-info ... 你也可以使用: --skip-triggers
我有一个算法,它在一个循环中使用 C 按位运算符(> 运算符,并且不想使用任何计算机语言(包括汇编)中的现有算术运算符。 最佳答案 在硬件中,您可以在根本没有任何逻辑门的情况下实现左移 1。只需像
我想用四种颜色填充不同的 div,只使用 javascript(当然有 HTML 结构),代码如下: HTML 1 2 3 4 JS var colors = {
我有一个基本的元素设置,根文件夹中有 index.html 和 styles.css。我希望每次单击保存时对 .css 文件所做的更改都会在浏览器中自动刷新。这是我的 gruntfile.js 的内容
我创建了一个应用程序,我需要通过两种方式登录:- Facebook登入,- 正常登录(电子邮件、密码)。 我已经使用 Facebook SDK 添加了 FBLogin 并修改了一个按钮,以便不使用 f
我把它作为我的 gulpfile.js: 'use strict'; var gulp = require('gulp'); var sass = require('gulp-sass'); gulp
RTOS有必要一直用C语言写吗?为什么不能用 Java 或其他技术进行编码……??是不是因为java中没有指针概念? 最佳答案 垃圾收集是反对 Java 实时化的重要原因。 JIT 是另一个,但它可以
我有一个使用 Netbeans 构建的示例代码。 它有一个 build.xml 文件,所以我下载了 ant 并尝试运行它。 我收到此错误消息: ...... nbproject\build-impl.
我正在开发响应式 Web 应用程序,需要创建 2 个独立的内容区域,如下所示, 到目前为止,我尝试过, border-right: 30px solid transparent; border-bot
我有这两个模型: // EventBoost describes the model of a EventBoost type EventBoost struct { ID
是否有一些有用且常用的事情无法用纯 Javascript 完成,而使用一些(不可见)Flash 却可以? 例如文件访问、直接打印、浏览器窗口控制、检测已安装的应用程序... 编辑:我只对客户端脚本感兴
#botonHome .contButton p a span{ height:25px; } #botonHome .contButton p a spa
我的对象由五个字段组成: public class ConfigurationItem { @SerializedName("show_interest") boolean s
使用 SSE 考虑这两个函数: #include int ftrunc1(float f) { return _mm_cvttss_si32(_mm_set1_ps(f)); } int f
在 icc 19 上,点积通过 fma 指令编译为循环。在 clang 和 gcc 上,fma 仅由 -ffast-math 生成. 然而,-ffast-math违反 IEEE 合规性,但 fma 完
我有一个特定的日志消息可能会被打印很多次的场景(可能是数百万次)。例如,如果我们记录(使用 logger.warn() 方法)每条缺少字段的记录,我们最终可能会记录很多输入文件有很多记录的情况缺少字段
在这个回复中 https://stackoverflow.com/a/58737595拜托,你能解释一下怎么写吗: return f( f, std::forward(args)... ); 而 f
我是一名优秀的程序员,十分优秀!