javascript - 从 angularjs 函数中触发点击事件会导致错误

标签 javascript angularjs angularjs-ng-click

我遇到了错误

[$rootScope:inprog] $apply already in progress

每当我在隐藏文件上传输入上触发点击事件时。

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"/>

Controller 中的 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');
};

我不会在我的 Controller 中的任何地方调用 $apply$digest。为什么会出现这个错误?

最佳答案

我刚刚遇到了类似的问题,我可以通过用

包裹我们点击的地方来解决这个问题
 setTimeout(function(){uploadClicked();},0);

Angular 版本将是

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

通过使用 Angular 版本,Angular 将知道并且不会在发现点击事件时初始化另一个摘要循环。

关于javascript - 从 angularjs 函数中触发点击事件会导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27754158/

相关文章:

javascript - 显示高分辨率图像

javascript - Angular DI 和继承 : injecting extensions of a base service

javascript - Angular meteor 用户界面路由器未加载

javascript - 如何修复这个 ng-class 切换比较?

javascript - 带有 ng-click 的 Angularjs 指令

javascript - 获取特定值之后的字符串的一部分

javascript - 来自 php 的 mysql 查询不起作用,但它在不同的 php 文件中工作

javascript - 在 $scope.$watch 中调用一个函数

css - 如何从弹出窗口中删除背景控件?

angularjs - ng-click 后清除 Controller 中的 ng-model 值