我有这个Vue应用,它由一个简单的首页,标题和首页文字组成。您可以在我的JSFiddle上在线查看此应用。这是代码:
HTML
<div id="app">
My header app
<router-view></router-view>
</div>
JavaScript
const Home = {
template: `
<div>
<h1>{{ $t('home.title') }}</h1>
<p v-html="$t('home.text')"></p>
</div>
`
};
const messages = {
en: {
home: {
title: 'Hello world',
text: 'Find all post by clicking <router-link to="/post">this link</router-link>!'
}
}
};
const routes = [
{ name: 'home', path: '*', component: Home }
];
const i18n = new VueI18n({
locale: 'en',
fallbackLocale: 'en',
messages: messages
});
const router = new VueRouter({
mode: 'history',
routes: routes
});
const vue = new Vue({
el: '#app',
router: router,
i18n: i18n
});
问题
如您所见,没有可见的“ router-link”链接,单击该链接将不会重定向到所需的路由。
问题
是否可以使VueI18n在<router-link>
指令中解释v-html
标签?
答案 0 :(得分:1)
v-html
用plain HTML替换元素的内容,因此替换字符串中使用的自定义元素不会编译为Vue.js组件。
您可能要检查VueI18n documentation建议的组件插值方式,其中涉及i18n
功能组件和模板字符串的使用。
以下是实现此方法的提琴的分叉:http://jsfiddle.net/u5vx1mLq/
简而言之,i18n
组件具有path
属性,您可以在其中放置模板字符串,而tag
属性具有定义标签的位置,i18n
组件将被替换用。 i18n
还有一个插槽,可用于定义子组件,在其中可以插入模板字符串的部分内容。
对于尴尬的解释,我们深表歉意,希望代码片段能为您解决这个问题:
const Home = {
template: `
<div>
<h1>{{ $t('home.title') }}</h1>
<i18n path="home.linkLabel" tag="label" for="home.linkText">
<router-link to="/post">{{ $t('home.linkText') }}</router-link>
</i18n>
</div>
`
};
const messages = {
en: {
home: {
title: 'Hello world',
linkText: 'this link',
linkLabel: 'Find all post by clicking {0}'
}
}
};