不幸的是,我遇到了一个关于bootstrap-UI工具提示的新问题。
在我的页面上,我有一个带工具提示和功能的按钮如果用户点击它:
<button type="button" tooltip-placement="right" tooltip="On the Left!" ng-click="areYouSure()">clickIt</button>`
如果用户单击此按钮,将调用以下方法:
$scope.areYouSure = function()
{
confirm("Are you sure?")
{
// do something
}
}
但每次用户点击按钮时我都会出现以下错误(在plunkr中,您会在开发人员工具中看到它):
Error: [$rootScope:inprog] $apply already in progress http://errors.angularjs.org/1.2.16/$rootScope/inprog?p0=%24apply minErr/<@http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js:78:12 beginPhase@http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js:12720:1 $RootScopeProvider/this.$get</Scope.prototype.$apply@http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js:12509:11 hideTooltipBind@http://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.12.1.js:2589:15 createEventHandler/eventHandler/<@http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js:2780:7 forEach@http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js:330:11 createEventHandler/eventHandler@http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js:2779:5 $scope.areYouSure@http://run.plnkr.co/F2xBYJzoBOq7rOlg/example.js:5:5 Parser.prototype.functionCall/<@http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js:10567:15 ngEventDirectives[directiveName]</<.compile/</</<@http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js:18627:17 $RootScopeProvider/this.$get</Scope.prototype.$eval@http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js:12412:16 $RootScopeProvider/this.$get</Scope.prototype.$apply@http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js:12510:18 ngEventDirectives[directiveName]</<.compile/</<@http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js:18626:15 createEventHandler/eventHandler/<@http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js:2780:7 forEach@http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js:330:11 createEventHandler/eventHandler@http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js:2779:5
我认为此错误仅出现在Firefox中。
我不明白,有人可以帮助我吗?
谢谢 此致
编辑:这是plunker:http://plnkr.co/edit/Xs88PpomBD8uuyNau2V7?p=preview
答案 0 :(得分:2)
在当前事件执行后,您可以使用$ timeout来运行confirm
对话框。这可以防止错误并允许解除工具提示。
我做了一个modified plunk来并排显示两种方法:
controller('TooltipDemoCtrl', ['$scope', '$timeout', function ($scope, $timeout) {
// "$apply already in progress" error
$scope.areYouSure1 = function(){
confirm("Are you sure?");
};
// No error
$scope.areYouSure2 = function(){
$timeout(function () {
confirm("Are you sure?");
}, 0);
};
}
]);