Typescript / Vue-声明道具的默认对象时,如何访问vuex存储?

时间:2019-07-18 18:32:23

标签: javascript typescript vue.js vuex

在我的Vue-Typescript项目中,我已经声明了一个名为“ data”的道具,并且我还想为此道具定义一个对象结构作为默认对象。一些字段是多语言的,为此,我需要访问vuex存储,该存储将返回用户已激活的所有活动语言。这使我可以动态生成字段。有谁知道我该如何实现?

//java on eclipse
private Music introMusic = new Music("introMusic.mp3", true);
private JCheckBox musicOnOff = new JCheckBox("BGM", true);
//
musicOnOff.setBorderPainted(false);
musicOnOff.setContentAreaFilled(false);
musicOnOff.setFocusPainted(false);
musicOnOff.setBounds(462, 334, 100, 100);
musicOnOff.setVisible(true);
musicOnOff.addItemListener(new ItemListener() {
    @Override
    public void itemStateChanged(ItemEvent e) {
           if(e.getStateChange() == ItemEvent.DESELECTED) {
               introMusic.close();
           }

           else if(e.getStateChange() == ItemEvent.SELECTED){
               introMusic.start();

           }
    }

});
add(musicOnOff);

1 个答案:

答案 0 :(得分:1)

您唯一的选择是手动导入商店并使用它而不是this.$store,因为在计算prop的默认值时该组件尚未被实例化。

  

请注意,在创建组件实例之前会先验证props,因此实例属性(例如数据,计算的等)在默认或验证器函数中将不可用。

(请参阅Vue Props,向上滚动一点以查看警告)

如果默认值是对象或数组,还应该将函数用作默认值,因为否则所有实例将共享相同的默认值。 (请参见Vue Prop ValidationpropE示例)

类似的事情应该起作用:

import store from 'path/to/your/store';

export default class CompanyForm extends Vue {

    public dialog = false;

    @Prop({default: () => ({
        name: '',
        address: store.state.Language.data.getLanguageDataStructure(),
        telephone: '',
        fax: '',
        email: '',
        website: ''
    })})
    data: object;
});