Bootstrap-UI $已在申请中

时间:2015-03-18 14:07:43

标签: angularjs

不幸的是,我遇到了一个关于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

1 个答案:

答案 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);
    };

  }
]);