我刚刚问了一个关于如何在选择输入字段(带有语言ID)发生变化时刷新i18n字符串插值的问题(Refreshing i18n translated string interpolated values in Aurelia)。我收到了一个很好的答案,但现在我意识到还有另外一个要求。
不仅需要刷新字符串插值。
在我的特定于页面的模板中,我有一些选择字段(自定义元素),它们通过注入“服务”类获取其选项值。该服务负责执行http获取请求,并将promise返回到select字段(自定义元素)。
现在问题就在于此。当我的站点范围导航栏自定义元素中的全局(语言)选择字段发生更改时,使用上面链接中提出的通知方法进行i18n刷新。那么我如何在模板中重新获取不同的选择输入自定义元素,但是使用导航栏中语言选择的新语言ID?
到目前为止,我所知道的唯一解决方案是window.location(router.navigate(sameroute)没有触发刷新)并在语言选择发生变化时刷新当前页面,但这显然不是一个很好的处理方式此
我会试着看看我是否可以整理一个傻瓜,因为这一切听起来有点令人困惑。
答案 0 :(得分:0)
"对于那些类型的组件间同步,请使用EventAggregator。 Pub a' lang-changed'事件,让任何组件做它需要的东西 更新自己"
所以在nav-bar.js中我这样做了:
let payload = { 'lngId': this.appLngId};
this.eventAggregator.publish('lang_changed', payload);
并在要刷新的自定义元素中,我把它放在attach()函数中:
this.eventAggregator.subscribe('lang_changed', payload => {
alert(payload.lngId)
self.myTodosService.getMyTodos(payload.lngId);
.then(function(data){
self.myTodos = data;
})
});