2016-11-08 63 views
0

全部, 我有一個Angular2應用程序。在這個應用程序中,我有一個打開對話框的按鈕。在這個對話框中是一個單獨的div,我需要採取行動。在對話框以及所有的子對象被創建之後,有什麼辦法可以在回調中執行代碼?Angular2對話回撥

我得到的最接近是

<modal #openDialog (focusin)="openExplorer('someData')"> 
... 
</modal> 

如果我與方法去然後我的代碼獲取的rexecuted如果這個div內的表單字段用戶點擊。

// HTML 
<p (click)="openTheDialog(openDialog, 'thisDivRightHere')">Click here to open me, fool</p> 
<modal #openDialog (focusin)="openExplorer('someData')"> 
    <div id="thisDivRightHere"></div> 
</modal> 

// Component 
openTheDialog(dlg, someDiv) void: { 
    this.fooBarService.preformTheAction(someDiv); 
} 

// Service 
preformTheAction = function(someDiv) { 
    $('#' + someDiv).html(new Date()); 
} 

在上面的例子中,沒有(的focusIn),那麼我不能在「thisDivRightHere」

獲得一個句柄但是,如果使用(的focusIn),我可以,但日期更改每次出頭互動與時間。

+0

是'modal'組件自己的創作得到解決呢? – silentsod

+0

不,我正在使用ng2-modal – user316114

+0

使用(onOpen)有什麼問題?我不知道實現的細節,但如果它在ngAfterViewInit中調用,那麼你會很好。 – silentsod

回答

0

我使用的setTimeout等待元素和精心放置回調

// HTML 
<p (click)="openTheDialog(openDialog)">Click here to open me, fool</p> 
<modal #openDialog (onOpen)="openIt(openDialog, 'thisDivRightHere')" > 
    <div id="thisDivRightHere"></div> 
</modal> 

tester(someDiv, dialog, callback): void { 
    var checkExist = setInterval(function() { 
     if ($('#'+someDiv).length) { 
      console.log("Exists!"); 
      clearInterval(checkExist); 
      callback(dialog); 
     } 
    }, 100); // check every 100ms 
}  

// Component 
openTheDialog(dlg) { 
    dlg.open(); 
} 

openIt(dlg, someDiv) void: { 
    this.tester(someDiv, this.myService, function(dlg) { 
     dialog.preformTheAction(someDiv); 
    }); 
} 

// Service 
preformTheAction = function(someDiv) { 
    $('#' + someDiv).html(new Date()); 
}