很多方法可以做到這一點,這裏有幾個選項:
隨着數據綁定:
app.html
<template>
<button click.delegate="refresh()">Refresh</button>
<component1 data.bind="myData"></component1>
<component2 data.bind="myData"></component2>
<component3 data.bind="myData"></component3>
</template>
app.js
export class App {
myData = null;
activate() {
return this.refresh();
}
refresh() {
someService.loadData()
.then(data => this.myData = data);
}
}
個
component1.js
import {bindable} from 'aurelia-framework';
export class Component1 {
@bindable data;
dataChanged(newValue, oldValue) {
// do something when the data changes...
}
}
隨着EventAggregator:
app.html
<template>
<button click.delegate="refresh()">Refresh</button>
<component1></component1>
<component2></component2>
<component3></component3>
</template>
app.js
個
import {inject} from 'aurelia-framework';
import {EventAggregator} from 'aurelia-event-aggregator'; // jspm install aurelia-event-aggregator
@inject(EventAggregator)
export class App {
constructor(eventAggregator) {
this.eventAggregator = eventAggregator;
}
activate() {
this.refresh();
}
refresh() {
someService.loadData()
.then(data => this.eventAggregator.publish('data changed', data);
}
}
component1.js
import {inject} from 'aurelia-framework';
import {EventAggregator} from 'aurelia-event-aggregator'; // jspm install aurelia-event-aggregator
@inject(EventAggregator)
export class Component1 {
constructor(eventAggregator) {
this.eventAggregator = eventAggregator;
}
dataChanged(data) {
// do something when the data changes...
}
bind() {
this.subscription = this.eventAggregator.subscribe('data changed', data => this.dataChanged(data));
}
unbind() {
this.subscription.dispose();
}
}