我试图通过单击另一个弹出窗口上的按钮来打开一个弹出窗口。我不确定这有多大可能。这是我创建的小提琴。任何帮助将不胜感激。谢谢。
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
,它运行嵌入的角度,但仅用于一个摘要循环。出于某种原因,第$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;
};
这是在对库进行此调整后工作的版本:http: //plnkr.co/edit/KHgyvUOhreT8sG7RECpU
但是,我怀疑这并不能完全解决问题,因为它只会运行$digest
两次循环。我必须更多地考虑如何正确解决这个问题。这可能与此问题有关:https ://github.com/mgcrea/angular-strap/issues/255
我建议尝试一下ui-bootstrap
完全不依赖于bootstrap.js
并更好地与angular.js
.