2016-11-08 53 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()); 
}