Aurelia:当另一个自定义元素中的值更改时,触发一个自定义元素的更新?

问题描述:

我刚刚问了一个问题(Refreshing i18n translated string interpolated values in Aurelia),说明如何在选择输入字段(带有语言ID)时更新i18n字符串插值。我收到了一个很好的答案,但是现在我意识到还有另一个要求。Aurelia:当另一个自定义元素中的值更改时,触发一个自定义元素的更新?

这不仅是需要刷新的字符串插值。

在我的页面特定模板中,我有一些选择字段(自定义元素),它们从注入“服务”类获取它们的选项值。该服务负责执行http获取请求,并向选择字段(自定义元素)返回承诺。

现在是这个问题。当我的网站范围的导航栏自定义元素中的全局(语言)选择字段发生更改时,使用上面链接中提出的通知方法进行刷新。那么我怎样才能在模板中重新获取我的不同选择输入自定义元素,但是在导航栏中选择语言中的新语言ID?

到目前为止,我所知道的唯一解决方案是window.location(router.navigate(sameroute)没有触发刷新),并在语言选择更改时刷新当前页面,但这显然不是一种好方法处理这个(事情。

我会试着看看我能不能拼凑一个plunkr,因为所有这些听起来有点混乱。

@chrismbeckett从https://gitter.im/Aurelia/Discuss给了我这个提示:

“对于这些类型的组件间同步的,使用EventAggregator 酒吧一个‘郎改变’事件,让任何部件做什么。需要 更新本身”

所以在NAV-bar.js我这样做:

let payload = { 'lngId': this.appLngId}; 
this.eventAggregator.publish('lang_changed', payload); 

和在被刷新的自定义元素中,我把它放在附件()函数中:

this.eventAggregator.subscribe('lang_changed', payload => { 
    alert(payload.lngId) 
    self.myTodosService.getMyTodos(payload.lngId); 
    .then(function(data){ 
     self.myTodos = data; 
    }) 
});