一個月前,我發佈了一個小的library,它只是允許顯示一個加載動畫。角4事件發射器沒有捕捉任何訂閱
爲此,我的用戶只需將<ng-load></ng-load>
添加到他們的模板中,並在其組件中注入LoadService
並呼叫loadService.animate(true)
(或false)。
對事物的庫邊我做到以下幾點:
在我的服務:
@Injectable()
export class LoadService {
// My event emitter
@Output() animating: EventEmitter<any> = new EventEmitter();
constructor() {}
// Method called by the user to display the animation,
// emits the value passed as parameter
public animate(val: boolean) {
this.animating.emit(val);
}
getValue(): any {
return this.animating;
}
}
而且在我的組件:
@Component({
selector: 'ng-load',
templateUrl: './load.component.html',
styleUrls: ['./load.component.css']
})
export class LoadComponent implements OnInit {
animate: boolean;
constructor(public loadService: LoadService) {}
ngOnInit(): void {
// Listen to our event emitter
this.loadService.getValue().subscribe((status: boolean) => {
this.animate = status;
});
}
}
我HTML
模板只是有一個<div *ngIf="animate">
到顯示或隱藏CSS
動畫。
所以我的事件發射器發射什麼我的用戶給予animate
,和我的布爾值應該在我的成分發生變化,或因此它做了一個月前。
由於某種原因,我的事件發射器訂閱沒有任何東西。
是否已更改EventEmitters
?我是否以錯誤的方式使用它們?
這就是我認爲,在閱讀了關於EventEmitters的詳細信息之後,我現在意識到我的實現可能會在未來(或者現在,就此而言)導致問題。 對我而言,最好的方法是什麼?創建一個我的組件將訂閱的「Observable」? –
Christopher
在getValue()中,嘗試返回Observable.of(this.animating)並從代碼中刪除@Output。 –