在我的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);
答案 0 :(得分:1)
您唯一的选择是手动导入商店并使用它而不是this.$store
,因为在计算prop的默认值时该组件尚未被实例化。
请注意,在创建组件实例之前会先验证props,因此实例属性(例如数据,计算的等)在默认或验证器函数中将不可用。
(请参阅Vue Props,向上滚动一点以查看警告)
如果默认值是对象或数组,还应该将函数用作默认值,因为否则所有实例将共享相同的默认值。
(请参见Vue Prop Validation,propE
示例)
类似的事情应该起作用:
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;
});