Popover over Popover,Angularjs

时间:2013-11-09 06:56:04

标签: angularjs popover

我试图通过单击另一个弹出窗口上的按钮来打开弹出窗口。我不确定它有多可能。 HERE is a Fiddle I created。任何帮助将不胜感激。感谢。

1 个答案:

答案 0 :(得分:1)

今天/昨天

更新: AngularJS 1.2.0 has been released,具体取决于您的时区。

它使得承诺A+ compliant并消除了$digest中令人讨厌的$timeout的需要,并且嵌套的popover完美地运作:http://plnkr.co/edit/zHFM9gJ6FLaUj2dWLR3I?p=preview

\ O /


问题有点复杂,不是直接在您的代码中,而是在angular-strap.js中,在第576行。

      popover.getPosition = function () {
        var r = $.fn.popover.Constructor.prototype.getPosition.apply(this, arguments);
        $compile(this.$tip)(scope);
        scope.$digest();
        this.$tip.data('popover', this);
        return r;
      };

scope.$digest()$compile之后调用,$q运行嵌入的角度,但仅用于一个摘要循环。出于某种原因,第542行的 $q.when(options.content || $templateCache.get(value) || $http.get(value, { cache: true })).then(function onSuccess(template) {

then

在调用另一个$scope.$digest之前不执行$digest部分。在$timeout解决问题后启动另一个 popover.getPosition = function () { var r = $.fn.popover.Constructor.prototype.getPosition.apply(this, arguments); $compile(this.$tip)(scope); scope.$digest(); $timeout(function () { scope.$digest(); }); // <-- The fix. this.$tip.data('popover', this); return r; }; 循环:

$digest

这是一个在使用库调整后运行的版本:http://plnkr.co/edit/KHgyvUOhreT8sG7RECpU

但是,我怀疑这并不能完全解决问题,因为这只会运行bootstrap.js循环两次。我必须更多地思考如何正确解决这个问题。这可能与此问题有关:https://github.com/mgcrea/angular-strap/issues/255

我建议您尝试ui-bootstrap完全不依赖angular.js,并与{{1}}进行更好的整合。