1

私はAngular2を初めて使用し、すべてのメソッドが にあるアプリの作成から始めmain.ts、そのファイルはmain.html. このアプリをサブコンポーネントとサービスにリファクタリングしました。だから、私は今持っています:

- app.component.ts
- app.html
- sub.component.ts
- sub.html
- data.service.ts

sub.componentにディレクティブとして含まれていapp.componentます。app.compontentを挿入data.serviceし、 のクリック イベントからサービスを呼び出すことができますapp.component

質問

以前は、コンポーネントの関数からビューのプログレス バーを更新できました。関数が独自のサービスになったので、サービスで長時間実行される (再帰的) メソッドの進行状況をユーザーに通知するにはどうすればよいでしょうか? サービスからapp.componentまたはsub.componentに進行状況を渡す必要があると思いますが、これはどのように行われるのでしょうか?

4

2 に答える 2

6

EventEmitterを使用して値をコンポーネントに渡すことができます。サービスでエミッターを作成し、コンポーネントでそれをサブスクライブします。

// data.service.ts
class DataService() {
  progress = new EventEmitter();

  longRunningMethod() {
    this.progress.emit(value);
  }
}

// app.component.ts
class AppComponent() {
  constructor(service: DataService) {
    service.progress.subscribe(value => console.log(value));
  }
}
于 2016-02-13T22:55:15.107 に答える
0

コンポーネント (または両方のコンポーネント) からサービスにサブスクライブする必要があります。

ブートストラップでサービスを提供できます(すべてのコンポーネントで利用できます)

bootstrap(App, [YourService]);

または提供するコンポーネントでそれを提供するには:

@Component({selector: "cmp", provide: [YourService]})

この例を見てください: https://plnkr.co/edit/d4jIDQ4lSuXUDttKFAS6?p=preview

于 2016-02-13T22:52:47.157 に答える