次の値がサブジェクトにプッシュされると、親コンポーネントのサブスクリプションはトリガーされません(サブジェクトをBehaviorSubjectに変更するとデフォルト値がないので使用してください)。角5:次の値でサブスクリプションがトリガーされない
option.component.ts
import { Component, OnInit, Input } from '@angular/core';
import { Subject } from 'rxjs';
@Component({
selector: 'app-option',
templateUrl: './option.component.html'
})
export class OptionComponent implements OnInit {
@Input() httpHeader;
period: Subject<string> = new Subject<string>();
constructor(){}
ngOnInit(){}
setPeriod(period: string){
this.period.next(period);
console.log('Next period: ' + period);
}
}
option.component.html
<mat-radio-group [(ngModel)]="periode" (ngModelChange)="setPeriod($event)">
<span *ngFor="let option of httpHeader.option"><mat-radio-button [checked]="option.default" [value]="option.param" >{{ option.desc }}</mat-radio-button><br /></span>
</mat-radio-group>
親コンポーネント:
periodeomzet.component
<app-option [httpHeader]="httpHeader"></app-option>
periodeomzet.component.html .TS
import { Component, OnInit, Output } from '@angular/core';
import { Subscription } from 'rxjs';
import { httpService } from 'app/services/http.service';
import { OptionComponent } from 'app/units/option/option.component';
@Component({
selector: 'app-periodeomzet',
templateUrl: './periodeomzet.component.html',
providers: [OptionComponent]
})
export class PeriodeomzetComponent implements OnInit {
httpHeader: Object;
subData: Subscription;
subOptions: Subscription;
period: string = 'period=d';
constructor(
private httpService: httpService,
private option: OptionComponent
){}
getReport(){
this.subData = this.httpService.getReport().subscribe((res: Response) => {
this.httpHeader = res.json()['header'];
});
}
ngOnInit(){
this.subOptions = this.option.period.subscribe(period => {
console.log('subOptions subscription fired');
this.period = period;
this.getReport();
// Do other stuff
});
}
ngOnDestroy(){
this.subData.unsubscribe();
this.subOptions.unsubscribe();
}
}
私はラジオボタンの選択を変更するが、それだけで「次を示していたときに、コンソールに「サブオプションは、解雇する」を参照してくださいに期待期間:... "なぜそれは動作しません?
なぜ、DIコンポーネントを介して子コンポーネントにアクセスしていますか? n @サービスを介して出力または通信する? – jonrsharpe
私は初心者なので、なぜこのようにしたのか分かりません。 2つのコンポーネントがサービスを介して通信できるようにすると、複数のコンポーネントがペアになっている場合、どのサービスと同じインスタンスに通信できますか?あなたは@Outputを使って例を表示できますか? – Rogier
文書を読もうとしましたか? https://angular.io/guide/component-interaction – jonrsharpe