これは単にあなたが見た中で最大の過度の過度のものになるでしょうが、これは私のレットメントのためのペットプロジェクトです。コンポーネントが表示されているときに初期化するAngular 2ライフフックがありますか?
私がしようとしていたのは、毎回ツールバーコードを繰り返すのではなく、自分のパンくずリストコンポーネントコンポーネントにユーザーの場所のパンくずリストを表示することでした。
import {Injectable} from "@angular/core";
import {Breadcrumb} from "./breadcrumb";
import {Subject} from "rxjs/Rx";
@Injectable()
export class BreadcrumbService {
private breadcrumbs:Subject<Breadcrumb[]>;
constructor() {
this.breadcrumbs = new Subject();
}
getBreadcrumbs():Subject<Breadcrumb[]>{
return this.breadcrumbs;
}
setBreadcrumbs(breadcrumbs:Breadcrumb[]){
this.breadcrumbs.next(breadcrumbs)
}
}
私は加入者にパンくずをブロードキャストする件名RxJsを使用しますので、私はBreadcrumbServiceを作成しました。 と私はそれがあまりにもパンくずリストコンポーネント
@Component({
selector: 'my-breadcrumbs',
moduleId: module.id,
templateUrl: 'breadcrumb.template.html'
})
export class BreadcrumbComponent implements OnInit {
private breadcrumbs:Breadcrumb[];
private breadcrumbsSubject:Subject<Breadcrumb[]>;
ngOnInit() {
this.breadcrumbsSubject.subscribe(
(breadcrumbs)=> {
this.breadcrumbs = breadcrumbs;
});
let breadcrumbs:Breadcrumb[] = [new Breadcrumb("HOME", ["/"])];
this.breadcrumbService.setBreadcrumbs(breadcrumbs);
}
constructor(private breadcrumbService:BreadcrumbService) {
this.breadcrumbsSubject = this.breadcrumbService.getBreadcrumbs();
}
}
を宣言し、私の他のコンポーネント
export class FolderComponent implements OnInit {
private breadcrumbs:Breadcrumb[];
constructor(*other services*, private breadcrumbService:BreadcrumbService) {
}
ngOnInit(){
getBreadcrumbs();
}
getBreadcrumbs():void {
//some code
this.breadcrumbService.setBreadcrumbs(breadcrumbs);
}
にそれを注入し、私もBreadcrumbModule
import {BreadcrumbService} from "./breadcrumb.service";
import {BreadcrumbComponent} from "./breadcrumb.component";
import {CommonModule} from "@angular/common";
import {MaterialModule} from "@angular/material";
import {AppRoutingModule} from "../app-routing.module";
@NgModule({
imports: [
MaterialModule.forRoot(),
CommonModule,
AppRoutingModule
],
declarations: [BreadcrumbComponent],
providers: [BreadcrumbService],
exports: [BreadcrumbComponent]
})
export class BreadcrumbModule {
}
を作成したシングルトンだから彼らも必要ですので、ブレッドクラムをあなたの必要性に変えることができます。問題は、コンポーネントがdiであるたびにonInit()lifehookが呼び出されると思っていたことですそれは建設中に一度だけ呼び出されているようだ。
はい、これはばかげていますが、将来的に私が次のようなものが必要な場合に備えて知りたいことがあります。表示されるたびにコンポーネント内の関数を呼び出す方法はありますか?それらの神々のブレッドクラムに対処する最善の方法
はいおかげで、私はこの伝統的な方法で解決しています。 –