-1

我试图通过单击另一个弹出窗口上的按钮来打开一个弹出窗口。我不确定这有多大可能。这是我创建的小提琴。任何帮助将不胜感激。谢谢。

4

1 回答 1

1

更新: AngularJS 1.2.0 已于今天/昨天发布,具体取决于您的时区。

它使 Promise A+ 兼容并消除了讨厌$digest的 in的需要$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,它运行嵌入的角度,但仅用于一个摘要循环。出于某种原因,第$q542 行:

   $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;
      };

这是在对库进行此调整后工作的版本:http: //plnkr.co/edit/KHgyvUOhreT8sG7RECpU

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

我建议尝试一下ui-bootstrap完全不依赖于bootstrap.js并更好地与angular.js.

于 2013-11-09T10:27:08.393 回答