2015-01-03 20 views
3

,我发现了错误从angularjs函数内触发点击事件引起错误

[$ rootScope:inprog] $正在进行

已经申请每当我触发click事件在隐藏文件上传输入。

HTML:

<!-- button that calls function in controller --> 
<button type="button" ng-click="uploadClicked()">Upload</button> 
<!-- Upload input I'm triggering the click event on --> 
<input type="file" accept="image/*" id="profile-photo" name="profile-photo" ng-hide="true"/> 

AngularJS功能控制器:

$scope.uploadClicked = function() { 
    //Causes Error: [$rootScope:inprog] $apply already in progress and opens file dialog 
    document.getElementById('profile-photo').click(); 

    //Causes Error: [$rootScope:inprog] $apply already in progress and does not open file dialog 
    $('#profile-photo').trigger('click'); 
}; 

我不会在我的控制器调用$apply$digest任何地方。为什么会发生这个错误?

+0

因为angularjs在后台执行某些操作,所以你在那个地方触发'click'冲突。 –

+0

这很不幸。有关如何规避此问题的任何建议? –

+0

尝试在$ timeout中包装它 –

回答

2

我刚刚得到一个类似的问题,我能够通过包装我们有

setTimeout(function(){uploadClicked();},0); 

点击的地方来解决它的角版本将

$timeout(function(){uploadClicked();},0); 

通过使用角度vesrion它会发现点击事件并且不会初始化另一个摘要循环。

+1

它应该是setTimeout ,而不是setTimeOut(没有大写字母O)。 –

+1

编辑谢谢 –

+0

其实,这会是$ timeout(function(){uploadClicked();}) – Tom