Javascript 在prop对象内部使用根函数

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({

我正在使用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>

{{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>