簡體   English   中英

Angular 訂閱並綁定到發出的事件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM