Javascript 在prop对象内部使用根函数
我正在使用Vuejs2 我有一个包含一些验证的道具。我想使用一个混合到所有组件中的Javascript 在prop对象内部使用根函数,javascript,vuejs2,Javascript,Vuejs2,我正在使用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({
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>
{{foo}}
导出默认值{
道具:{
傅:{
类型:字符串,
默认值:this.lang.get('some.lang')//无法读取未定义的属性'get'
}
},
创建(){
console.log(this.lang.get('some.lang');//返回正确的值
}
}
所以为了澄清,我可以在created()
函数中访问this.lang,但在我的props对象中无法访问它
根据我所能得到的的上下文,此
根据您所处的对象/函数而有所不同。我曾尝试在创建的挂钩中编辑道具,但找不到访问的方法。我通过创建筛选器成功地使其工作,但它与我组件中的某些其他代码不一致
道具有一个可以访问根vm或在道具对象外部设置的默认值的好方法是什么?您不能基于Vue实例中的数据属性设置道具的默认值。您不能在
props
对象的上下文中访问Vue实例,也不能在com之后设置默认值ponent已被实例化
将lang
对象直接导入bar.component.vue
文件:
<script>
import lang from 'lang.js'
export default {
props: {
foo: {
type: String,
default: lang.get('some.lang')
}
}
}
</script>
我建议将您需要的东西放在商店的许多组件中(VueX)@connexo这只是一个简单的组件,你可以传入一个字符串,它传入的字符串并不常见,它将是一个引用lang.js文件的字符串。谢谢你的想法。编辑:除非你谈论的是lang对象?我从来没有见过你声明
props.foo.type
属性的方式。你能链接我的吗关于这个语法有什么问题吗?@connexo当然。啊,好吧。我希望props.foo.type
是一个简单的字符串,由一些ES6/7 sugar处理,我还不知道。太棒了。我不想再导入它,所以我想我会使用计算方法。谢谢你的描述性回答。
<template>
<div>{{ fooVal }}</div>
</template>
<script>
export default {
props: {
foo: { type: String }
},
computed: {
fooVal() {
return (this.foo === undefined) ? this.lang.get('some.lang') : this.foo;
}
}
}
</script>