在第一次单击时承诺解决后,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?

检测 uib-popover 何时打开和关闭?

如何为 uib-popover 使用不同的触发器组合?

AngularJs的UI组件ui-Bootstrap分享——Tooltip和Popover

如何删除单击 uib-accordion-heading 时出现的蓝色边框?

在 Angular 中承诺 3 秒后重新加载页面