這裏我有類似下面的菜單服務...角2個如何自定義接口的OnInit一樣
menu.service.ts
import { Injectable, EventEmitter } from '@angular/core';
import {
Http,
Request,
Response,
RequestMethod,
Headers,
URLSearchParams,
RequestOptions,
ResponseContentType,
} from '@angular/http';
import { Observable } from 'rxjs/Observable';
import * as _ from 'lodash'
@Injectable()
export class MenuService {
constructor(public http: Http) {}
IsOnReady = false;
_onReady: EventEmitter<string> = new EventEmitter<string>(true);
data = [];
getData() {
return this.http.get('/api/Menus').subscribe(data => {
this.data = data.json()
this.IsOnReady = true;
this._onReady.emit('menu is ready');
});
}
onReady(callback) {
if (this.IsOnReady) {
callback();
}
else {
this._onReady.subscribe(r => {
callback();
});
}
}
}
在另一頁,我總是需要調用menu.onReady
拿到菜單數據,然後做的東西后...
import { OnInit } from '@angular/core';
import { MenuService } from '../../../services/menu.service';
export class NewsComponentBase implements OnInit{
NewsCategoryID:string
constructor(public menu: MenuService) {
}
ngOnInit() {
this.menu.onReady(() => this.active());
}
active() {
this.NewsCategoryID= this.menu.data[0].NewsCategoryID;
}
}
如何實現像角的onInit
接口,一些類似的代碼
import { MenuService,MenuOnReady} from '../../../services/menu.service';
export class NewsComponentBase implements MenuOnready {
NewsCategoryID:string
constructor(public menu: MenuService) {
}
MenuOnReady() {
this.NewsCategoryID= this.menu.data[0].NewsCategoryID;
}
}
您訂閱的事件。沒有看到在任何地方完成,它甚至工作?我認爲正確的做法是使用您從其他兩個組件中訂閱的主題。如果你想定製一個生命週期鉤子,那麼使用ngDoCheck通常是一條可行的路。 – unitario
嗨,謝謝!它運行良好,使用「menu.OnReady」。 我認爲界面「MenuOnReady」它不屬於角的生命週期鉤。它屬於「getData()」函數,當「getData」獲得數據時,那麼實現「MenuOnready」的每個類都可以直接使用菜單數據 – wangzhen