在第一次单击时承诺解决后,uib Popover 未显示
Posted
技术标签:
【中文标题】在第一次单击时承诺解决后,uib Popover 未显示【英文标题】:uibPopover not showing after promise resolves on first click 【发布时间】:2018-08-21 00:25:44 【问题描述】:相关信息: 以角度 1.5.8 编写。 引导用户界面 1.1.2。 uibPopover 用于显示我的弹出框。
我在尝试显示依赖于 promise 数据的 popver 时遇到问题
相关的角度服务获取调用:
this.getDetails = function (req)
var deferred = $q.defer();
return $http.get("/api/getDetails?id=" + req).then(
function (response)
deferred.resolve(response.data.ResponseData);
return deferred.promise;
);
角度控制器代码:
$scope.showPopOver(req)
angularService.getDetails(req).then(function(response)
$scope.vm.myPopOverData = response;
$scope.vm.htmlPopOver =
templateUrl: '/path/to/template.html',
title: 'Details'
;
);
弹出框所在的html:
<a style="cursor:pointer" tabindex="0" popover-placement="right-top" uib-popover-template="vm.htmlPopOver.templateUrl" popover-title="vm.htmlPopOver.title"
popover-trigger="outsideClick" ng-click="showPopOver(data)" >Click me</a>
第一次单击我的锚标记时,会检索数据,但不会显示任何弹出框。第二次单击,弹出框将显示,但是 api 调用没有返回应显示的数据(这是一个带有 ng-repeat 的表)。它不可避免地会在 Promise 完成解析后设置,但在等待服务器响应时,弹出框保持关闭/隐藏会很好。
所以,我想我有两个问题。第一次单击弹出框只会检索数据。另一个问题是在检索数据之前出现的弹出框。
这个问题有简单/优雅的解决方案吗?
提前谢谢你
【问题讨论】:
【参考方案1】:您可以使用popover-is-open="isOpen"
属性来传递弹出框的状态,当您希望它显示时只需切换isOpen
标志即可。
<a style="cursor:pointer" tabindex="0"
popover-placement="right-top" uib-popover-template="vm.htmlPopOver.templateUrl"
popover-title="vm.htmlPopOver.title"
popover-is-open="vm.isOpen"
popover-trigger="outsideClick" ng-click="showPopOver(data)">
Click me
</a>
代码
this.getDetails = function (req)
return $http.get("/api/getDetails?id=" + req).then(
//removed unnecessary promise
function (response)
vm.isOpen = true;
return response.data.ResponseData;
);
【讨论】:
这个问题是会有几行然后绑定到相同的布尔值,这将导致所有弹出框打开而不管被点击。我曾考虑过用它们自己的布尔值“启动”我的对象列表,但我想看看在我弄乱我整洁的代码之前是否有更好的方法。不过还是谢谢你的回复以上是关于在第一次单击时承诺解决后,uib Popover 未显示的主要内容,如果未能解决你的问题,请参考以下文章
如何防止 uib-carousel 裁剪 uib-popover?
AngularJs的UI组件ui-Bootstrap分享——Tooltip和Popover