【发布时间】:2018-06-12 13:47:08
【问题描述】:
我正在使用 Vuejs2。
我有一个包含一些验证的道具。我想使用一个混合到我所有组件中的Lang 对象。我的一个道具有一个默认值,需要访问这个 lang 对象。我可以在 create() 函数中访问 lang 对象,但不能在 props.foo.default() 选项中访问。
app.js
import Vue from 'vue';
import messages from '../lang/messages';
import lang from 'lang.js';
const Lang = new lang({
'messages': messages,
'locale': 'en'
});
Vue.mixin({
data: function () {
return {
lang: Lang
}
}
});
const app = new Vue({
el: '#app'
});
bar.component.vue
<template>
<div>{{ foo }}</div>
</template>
<script>
export default {
props: {
foo: {
type: String,
default: this.lang.get('some.lang') // Cannot read property 'get' of undefined
}
},
created () {
console.log(this.lang.get('some.lang'); // returns correct value
}
}
</script>
所以澄清一下,我可以在我的 created() 函数中访问 this.lang,但我无法在我的 props 对象中访问它。
据我所知,this 的上下文因您所在的对象/函数而异。我尝试在 created 钩子中编辑道具,但找不到获取访问权限的方法。我设法通过创建一个过滤器使其工作,但它与我的组件中的其他一些代码不一致。
如果 props 有一个可以访问根 vm 或在 props 对象之外设置的默认值,有什么好方法?
【问题讨论】:
-
我建议将您需要的东西放在商店 (VueX) 内的许多组件中。
-
@connexo 这只是一个简单的组件,你可以传入一个字符串,它传入的字符串并不常见,它将是一个引用 lang.js 文件的字符串。谢谢你的想法。编辑:除非你在谈论 lang 对象?
-
我从未见过您声明
props.foo.type财产的方式。你能给我一些关于那个语法的链接吗? -
@connexo 当然。 vuejs.org/v2/guide/components.html#Prop-Validation
-
啊,好吧。我希望
props.foo.type是一个简单的字符串,由一些我还不知道的 ES6/7 糖分担。
标签: javascript vuejs2