【发布时间】:2013-11-09 06:56:03
【问题描述】:
我试图通过单击另一个弹出窗口上的按钮来打开一个弹出窗口。我不确定这有多大可能。 HERE is a Fiddle I created。任何帮助将不胜感激。谢谢。
【问题讨论】:
我试图通过单击另一个弹出窗口上的按钮来打开一个弹出窗口。我不确定这有多大可能。 HERE is a Fiddle I created。任何帮助将不胜感激。谢谢。
【问题讨论】:
更新: AngularJS 1.2.0 has been released 今天/昨天,具体取决于您的时区。
它承诺A+ compliant 并消除了$timeout 中讨厌的$digest 的需要,嵌套的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 之后调用,它运行嵌入的角度,但仅用于一个摘要循环。出于某种原因,第 542 行的$q:
$q.when(options.content || $templateCache.get(value) || $http.get(value, { cache: true })).then(function onSuccess(template) {
在调用另一个$scope.$digest 之前不执行then 部分。在$timeout 之后启动另一个$digest 循环可以解决问题:
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
我建议尝试使用完全不依赖于bootstrap.js 并与angular.js 更好地集成的ui-bootstrap。
【讨论】: