首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在子组件上调用"Refresh“

在子组件上调用"Refresh“
EN

Stack Overflow用户
提问于 2016-02-12 18:09:43
回答 1查看 3.8K关注 0票数 7

我正在考虑添加一个“刷新”按钮到一个屏幕,其中有几个奥雷利亚组件。我不希望将其构建到作为刷新目标的组件中。

因此,基本上,我想要重新提取一些web数据,以更新组件时,这个“刷新”按钮被点击。“重新初始化”组件,使构造函数再次运行也是可以接受的。我会将同样的概念应用到我所拥有的几个组件上,如果存在一个模式来泛化地解决这个问题,那将是精妙的。

我设想了一种解决这个问题的解决方案,它以某种方式调用子组件上的一个方法,我可以添加该方法,例如,类似于childcomponent.Refresh()的东西。但是,我不确定如何引用子组件。

处理这种情况的适当方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-12 20:07:54

有很多方法可以做到这一点,这里有几个选项:

与数据绑定:

app.html

代码语言:javascript
复制
<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

代码语言:javascript
复制
export class App {
  myData = null;

  activate() {
    return this.refresh();
  }

  refresh() {
    someService.loadData() 
      .then(data => this.myData = data);
  }
}

组件1.js

代码语言:javascript
复制
import {bindable} from 'aurelia-framework';

export class Component1 {
  @bindable data;

  dataChanged(newValue, oldValue) {
    // do something when the data changes...
  }
}

使用EventAggregator:

app.html

代码语言:javascript
复制
<template>
  <button click.delegate="refresh()">Refresh</button>
  <component1></component1>
  <component2></component2>
  <component3></component3>
</template>

app.js

代码语言:javascript
复制
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

代码语言:javascript
复制
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();
  }
}
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35369418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档