[英]Angular Subscribe and Bind to emitted event
我的組件中有一個方法,當下拉值更改時會觸發該方法。 這會觸發一個模態組件彈出並提示有關剛剛所做更改的注釋。
我訂閱了一個從模態發出的事件並將它傳遞給另一個方法,這樣當注釋被填寫並單擊按鈕時,它將該注釋傳遞給另一個方法,在那里我處理它並存儲它。
/**
* On the update of a task status
* @param $event
* @param task
*/
onTaskStatusChange($event, task) {
// Define our status/task
let taskID = task.elementRef.nativeElement.dataset.taskid;
let statusID = $event.StatusID;
// Call our modal, pass the ConfirmRemoveRuleModalComponent
this._bsModalRef = this._modalService.show(TransitionPromptComponent);
this._bsModalRef.content.action.take(1).subscribe(this.doTaskStatusChange.bind(this, taskID, statusID));
}
/**
* After entering our note on the transition prompt, update the status
* @param note
* @param taskID
* @param statusID
*/
doTaskStatusChange(note, taskID, statusID) {
console.log(note, taskID, statusID)
}
在這段代碼中, onTaskStatusChange
是觸發模態的原因。 然后它將將從它省略的值綁定到一個新方法doTaskStatusChange
。
當我只傳遞一個值時,這工作得很好,比如this._bsModalRef.content.action.take(1).subscribe(this.doTaskStatusChange.bind(this));
當我嘗試將一些附加值以及從組件發出的值(注釋)傳遞給第二種方法時,問題就發生了。
在這種情況下, statusID
中的doTaskStatusChange
顯示的是從模態組件發出的值,而不是應該與其一起傳遞的數值。
這里是否存在范圍問題, this
在某種程度上與$event
沖突?
bind
的第一個參數在函數體中變成this
。 您可以檢索傳遞給bind
的參數:
this.doTaskStatusChange.bind(this, taskID, statusID)
如果您將doTaksStatusChange
定義為:
doTaskStatusChange(taskID, statusID) {
console.log(this, taskID, statusID)
}
您可以在此 stackblitz 中找到代碼示例。
另一種方法是使用箭頭函數作為回調:
this._bsModalRef.content.action.take(1).subscribe((note) => {
this.doTaskStatusChange(note, taskID, statusID);
});
和
doTaskStatusChange(note, taskID, statusID) {
console.log(note, taskID, statusID)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.