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

时间:2015-11-03 17:18:03

标签: aurelia

我刚刚问了一个关于如何在选择输入字段(带有语言ID)发生变化时刷新i18n字符串插值的问题(Refreshing i18n translated string interpolated values in Aurelia)。我收到了一个很好的答案,但现在我意识到还有另外一个要求。

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

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

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

到目前为止,我所知道的唯一解决方案是window.location(router.navigate(sameroute)没有触发刷新)并在语言选择发生变化时刷新当前页面,但这显然不是一个很好的处理方式此

我会试着看看我是否可以整理一个傻瓜,因为这一切听起来有点令人困惑。

1 个答案:

答案 0 :(得分:0)

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

  

"对于那些类型的组件间同步,请使用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;
    })
});